交友约会| 杂志期刊| 小说| 论坛| 电影下载| 两性知识| 电脑知识| 汽车| 聊天| 收藏
频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源: 作者: 出处:综艺读书 2007-03-16 
关 键 词:设计  qq  os  ie  asp.net  

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

更多文章 更多内容请看.NET开发手册  .NET移动与嵌入式技术  .NET应用研究专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
综艺读书宗旨
相关专题
·网络管理实用手册 (18054篇文章)
·存储过程 (1696篇文章)
·网络存储—光纤通道 (1723篇文章)
·.NET移动与嵌入式技术 (4937篇文章)
·.NET开发手册 (4730篇文章)
·ASP.NET教程 (6651篇文章)
·服务器存储专栏 (6211篇文章)
·.NET应用研究 (421篇文章)
·ASP.NET应用篇 (2067篇文章)
·存储方案 (376篇文章)
热点标签: 设计  qq  os  ie  asp.net  
最新技术文档
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
百度推荐,商机无限
搜索您感兴趣的内容
Web 全站
综艺电脑频道编辑信箱  告诉我们您想看的专题或文章

友情互链 | 收藏本站 | 联系我们 | 在线留言 | 京ICP备08008424号|