栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在ASP.NET中使用静态变量代替应用程序状态

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在ASP.NET中使用静态变量代替应用程序状态

微软怎么说

ASP.NET包括应用程序状态,主要是为了与经典ASP兼容,因此更容易将现有应用程序迁移到ASP.NET。建议将数据存储在应用程序类的静态成员中,而不是存储在Application对象中。这可以提高性能,因为访问静态变量的速度比访问应用程序字典中的项的速度更快。

参考:http :
//support.microsoft.com/default.aspx?scid=kb;zh-
CN;Q312607

我的经验

静态变量和应用程序状态之间的主要区别在于,所有线程和池的应用程序状态都相同,但是仅每个池的静态状态是相同的。

经过新的测试后,我发现Application状态变量与静态变量相同,并且它们仅引用应用程序上的静态变量,并且出于兼容性原因而存在,如Microsoft所说。

如果您有4个运行站点的池(网络花园),则您有4套不同的静态内存。

您的密码

关于您的代码,您尝试访问词典数据的方式存在错误,并且在实际网络中将出现错误。这部分代码锁定了完整Dictionary的变量,但不锁定您在使用时要进行的更改。

// this is not enough to manipulate your data !public static Dictionary<string, object> CacheItems{    get { lock (locker) { return cacheItems; } }    set { lock (locker) { cacheItems = value; } }}

正确的方法是锁定所有添加/删除操作,直到完成操作为止。

private static Dictionary<string, object> cacheItems = new Dictionary<string, object>();private static object locker = new object();public Dictionary<string, object> CacheItems{    get{ return cacheItems; }    set{ cacheItems = value; }}SomeFunction(){    ...    lock(locker)    {        CacheItems["VariableName"] = SomeObject;    }    ...}

从当你操作应用状态数据另一方面,你需要用 全局 的它锁

Application.Lock();
Application.UnLock();
例如

Application.Lock();Application["PageRequestCount"] = ((int)Application["PageRequestCount"]) + 1;Application.UnLock();

最后得出一些结论:

避免应用程序状态,而只在代码上使用静态变量。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/447167.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号