高性能ASP.NET应用程序(1)——优化状态管理

         今天我们来聊一下在编写ASP.NET应用程序的时候如何优化状态管理。我相信绝大多数的ASP.NET开发人员或多或少的都会对使用ASP.NET的状态有所了解。在本文中,我们不会把如何使用ASP.NET的状态作为重点,而更侧重于讨论如何更加有效率和有效果的管理ASP.NET的状态。Web应用程序为状态管理提出了一些具体的挑战,尤其是Web场/园的情形。您就状态存储的位置和方法所作出的决定对您的应用程序的性能和扩展性将会产生巨大的影响。          总的来说,ASP.NET中有3种状态:应用程序状态、会话状态和视图状态。他们分别需要在不同的情形下使用。应用程序状态应用于所有的用户和会话。而会话状态用于存储单个用户的状态。在这里单个用户可以理解为来自同一个浏览器的请求。视图状态用于存储单个页面的状态信息,就像在某个具体网页的控件中包含的内容。归结起来有2种状态管理指南:1)在客户端上存储简单的状态;2)考虑序列化带来的开销。对于第一点,当视图状态不可用时您可以考虑利用客户端cookie、查询字串或者隐藏控件。考虑到状态的序列化,请确保只在必要时才进行存储,并且倾向于存储简单的类型(约15%到25%的性能影响)而非复杂的对象(可能会有更大的影响)。          现在我们来分别谈一下怎样最优化应用程序状态、会话状态和视图状态管理。          应用程序状态管理技巧: 1. HttpApplicationState VS 静态属性:您应该避免在应用程序对象中存储数据。取而代之的是,您可以使用应用程序类的静态成员。您可以由此获得性能提升因为访问静态成员会比访问应用程序对象快得多。一个例子是: <% private static string[] _states[]; private static object _lock = new object(); public static string[] States {   get {return _states;} } public static void PopulateStates() {   //ensure this is thread safe   if(_states == null)   {     lock(_lock)     {…

0