如何:保存应用程序状态中的值
更新:2007 年 11 月
应用程序状态是可供 ASP.NET 应用程序中的所有类使用的数据储存库。它存储在服务器的内存中,因此与在数据库中存储和检索信息相比,它的执行速度更快。与特定于单个用户会话的会话状态不同,应用程序状态应用于所有的用户和会话。因此,应用程序状态非常适合存储那些数量少、不随用户的变化而变化的常用数据。
应用程序状态存储在 HttpApplicationState 类中,该类是用户首次访问应用程序中的任何 URL 资源时创建的一个新实例。HttpApplicationState 类通过 Application 属性公开。
应用程序状态将数据存储为 Object 数据类型。因此,在检索该数据时,必须将其重新转换为适当的类型。
由于应用程序状态存储在服务器的内存中,因此应用程序状态中的大量数据可快速填充服务器内存。如果重新启动应用程序,应用程序状态数据便会丢失。应用程序状态无法在网络场中的多台服务器间或网络园中的辅助进程间共享。最后还请注意,应用程序状态采用自由线程模式,因此存储在应用程序状态中的任何数据必须具有内置的同步支持。有关这些注意事项的更多信息,请参见 ASP.NET 应用程序状态概述 和 ASP.NET 状态管理建议。
将值写入应用程序状态
在应用程序中设置 HttpApplicationState 类中变量的值。
下面的代码示例演示如何将应用程序变量 Message 设置为一个字符串。
Application("Message") = "Welcome to the Contoso site."
Application["Message"] = "Welcome to the Contoso site.";
应用程序启动时将值写入应用程序状态
在应用程序 Global.asax 文件的 Application_Start 处理程序中,设置应用程序状态变量的值。同常规的 .aspx 页一样,HttpApplicationState 类也通过 Application 对象公开。
下面的代码示例演示如何将应用程序变量 Message 设置为一个字符串,并将变量 PageRequestCount 初始化为 0。
Application("Message") = "Welcome to the Contoso site." Application("PageRequestCount") = 0
Application["Message"] = "Welcome to the Contoso site."; Application["PageRequestCount"] = 0;
用锁定方法将值写入应用程序状态
应用程序状态变量可以同时被多个线程访问。因此,为了防止产生无效数据,在设置值前,必须锁定应用程序状态,只供一个线程写入。
说明: |
---|
除非设置了其他类型的锁,否则就应该始终在 lock 语句中修改应用程序状态数据。有关更多信息,请参见为多线程处理同步数据。 |
用锁定方法将值写入应用程序状态
在设置应用程序变量的代码中,调用 HttpApplicationState.Lock 方法,并设置应用程序状态值,然后调用 HttpApplicationState.UnLock 方法取消锁定应用程序状态,释放应用程序状态以供其他写入请求使用。
下面的代码示例演示如何锁定和取消锁定应用程序状态。该代码将 PageRequestCount 变量值增加 1,然后取消锁定应用程序状态。
Application.Lock() Application("PageRequestCount") = _ CInt(Application("PageRequestCount")) + 1 Application.UnLock()
Application.Lock(); Application["PageRequestCount"] = ((int)Application["PageRequestCount"])+1; Application.UnLock();