在ASP.Net应用程序中使用全局变量的最佳方法是什么?

时间:2010-05-11 13:17:51

标签: asp.net static global

对于我的全局变量和数据,我发现自己处于关于是否使用HttpApplicationState或Static变量的困境 - 最好的方法是什么?

本文档指出应该使用静态变量而不是httpapplicationstate: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q312607

但是,我喜欢HttpApplicationState(和System.Web.Caching.Cache)的一件事是,可以轻松枚举条目并选择要删除的项目(我为此创建了一个全局CacheManager.axd)虽然我不相信静态变量有一个简单的方法(即使那时它还不清楚如何“重新初始化”它们),而不回收应用程序池。

有关处理和管理全局对象的简洁通用方法的任何建议吗?

谢谢,Mark。

2 个答案:

答案 0 :(得分:1)

你的直觉是正确的。使用System.Web.Caching。内置的缓存管理负责处理内存分配和过期或低优先级对象的所有繁重工作。

确保为缓存密钥使用命名约定,这在未来有意义。如果您开始严重依赖缓存,则需要能够按名称定位/过滤不同的缓存键。

答案 1 :(得分:0)

作为一般做法,尽可能避免在Web应用程序中避免全局状态。 ASP.NET是一个多线程环境,可以并行处理多个请求。除非您的全局状态是不可变的(只读),否则您将不得不应对管理共享可变状态的挑战。

如果您的共享状态是不可变的,并且您不需要枚举它,那么我认为静态变量没有问题。

如果您的共享状态是易变的/可变的,那么您可能希望在您选择存储数据的任何底层机制之上创建抽象,以确保访问和修改该共享状态是一致并符合消耗它的代码的期望。我可能也会在这样的设计中使用系统缓存,只是为了能够利用缓存服务中内置的过期和依赖功能(如果需要)。