ASP.NET状态存储管理九大兵器之八(应用程序)

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

可以使用 HttpApplicationState 类在整个应用程序中共享信息,该类通常是通过 HttpContext 对象的 Application 属性进行访问的。该类公开对象的键/值字典,您可以使用该字典来存储 .NET 框架对象和与来自多个客户端的多个 Web 请求相关的标量值。

创建Application

private void Page_Load(object sender, System.EventArgs e)

{

if( !IsPostBack )

{

SortedList ApplicationValue =new SortedList();

ApplicationValue.Add("1","a");

ApplicationValue.Add("2","b");

ApplicationValue.Add("3","c");

ApplicationValue=SortedList.Synchronized(ApplicationValue);

Context.Application["app"]=ApplicationValue;

/*

设置Application的第2种方法

Add方法,将新的对象添加到 HttpApplicationState 集合中

Context.Application.Add("app",ApplicationValue);

*/

}

}

读取Application

private void Button1_Click(object sender, System.EventArgs e)

{

SortedList List=(SortedList)Context.Application["app"];

/*

取得Application的第2种方法

Get方法已重载。通过名称或索引获取 HttpApplicationState 对象

SortedList List=(SortedList)Context.Application.Get("app");

或者

SortedList List=(SortedList)Context.Application.Get(0);

*/

System.Text.StringBuilder sb=new System.Text.StringBuilder("");

if( List!=null )

{

sb.Append("app exists").Append("<br>") ;

for(int i=0;i<List.Count;i++)

{

sb.Append((string)List.GetKey(i)).Append(" ");

sb.Append((string)List.GetByIndex(i)).Append("<br>");

}

Response.Write(sb.ToString());

}

else

{

Response.Write("app not exists");

}

}

点击按钮后,显示

app exists

Key value

1 a

2 b

3 c

应用程序状态同步

应用程序中的多个线程可以同时访问存储在应用程序状态中的值。因此,当创建需要访问应用程序状态值的对象时,必须始终确保该应用程序状态对象是自由线程的并执行它自己的内部同步,要不就执行手动同步步骤以防止出现争用条件、死锁或访问冲突。

HttpApplicationState 类提供两种方法 Lock 和 Unlock,一次只允许一个线程访问应用程序状态变量。

对 Application 对象调用 Lock 会导致 ASP.NET 阻止运行在其他辅助线程上的代码试图访问应用程序状态中的任何对象。只有当调用 Lock 的线程对 Application 对象调用相应的 Unlock 方法时才解除对这些线程的阻塞。

Application.Lock();

Application["count"]=(int)Application["count"]+1;

Application.UnLock();

如果没有显式调用 Unlock,当请求完成、请求超时或请求执行过程中出现未处理的错误并导致请求失败时,.NET 框架将自动移除锁。这种自动取消锁定会防止应用程序出现死锁。

应用程序需要小心使用复杂对象,例如,集合.集合没有被设计为供多线程同时访问.

利用方法Synchronized()创建集合对象线程安全版本

SortedList ApplicationValue =new SortedList();

ApplicationValue.Add("1","a");

ApplicationValue.Add("2","b");

ApplicationValue.Add("3","c");

ApplicationValue=SortedList.Synchronized(ApplicationValue);

联系方式:

http://www.cnblogs.com/aierong

aierong@2118.cn

aierong@hotmail.com

QQ:114298

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航