转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
ASP.NET状态存储管理九大兵器之八(应用程序)         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:805 更新时间:2009/4/23 10:47:49

可以使用 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


[C语言系列]NET 中C#的switch语句的语法  [系统软件]托拽Explore中的文件到VB.net的窗口
[系统软件]Boost库在XP+Visual C++.net中的安装  [常用软件]新配色面板:Paint.Net3.0RC1官方下载
[常用软件]用内建的“Net Meeting”聊天  [VB.NET程序]Henry的VB.NET之旅(三)—共享成员
[VB.NET程序]Henry的VB.NET之旅(二)—构造与析构  [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体
[VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET)  [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台