Web应用程序中的静态变量
我可以在Web应用程序中使用静态变量吗? 什么是静态的替代品? 当我在页面中使用静态变量并且多个用户使用该应用程序时,它会产生冲突数据(不正确的数据)。
使用静态成员有什么限制?
静态成员是否在内存中共享?
考虑将共享变量存储在HttpApplication对象或Cache对象中。
但是,如果要分别为每个用户存储值,则应将这些值存储在Session变量中。
Asp.Net中的静态变量在w3svc.exe进程的内存空间中共享,并且不是线程安全的。 它们可以由应用程序的任何用户访问和修改。 这可能会导致不必要的修改,除非您在这些值的存储周围编写自己的锁机制。
您应该尝试以下语法:
Application["KEY"] = value;
存储共享的应用程序范围的数据和
Session["KEY"] = value;
以每个用户为基础存储数据
您可以使用WebCache对象在到期条件下将数据存储在Web服务器的内存中。 该语法看起来类似于:
Page.Cache.Insert("KEY", "VALUE", null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
有关管理WebCache对象的语法的更多信息,请访问:
https://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx
只是为了添加@Jeff Fritz所说的内容,IIS应用程序会创建一个AppDomain,在其中加载程序集。 就像普通的Windows应用程序的规则一样,如果是类
public static class Something { public static string SomeString { get; set; } }
…然后每个 AppDomain只有一个Something.SomeString
属性可用。 W3SVC进程管理AppDomain,但不保证线程安全(因为AppDomain可以为多个请求提供服务)。 如果您使用只读静态属性,它可能很好(例如读取配置值)。 如果要创建在请求生命周期内发生更改的可变属性,则最好使用此处其他问题中详述的其中一种存储机制。
上述就是C#学习教程:Web应用程序中的静态变量分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1015251.html