我有一个只读列表,它在应用程序的所有实例之间共享,并且不会经常更改。在静态类上创建一个属性来访问这个列表是一种好的做法吗?该列表是在静态构造函数中从数据库中填充的。将应用程序池设置为每晚回收将保证列表每天都是最新的,对吗?有什么理由认为这是个坏主意吗?谢谢!
发布于 2011-11-11 23:22:07
静态类没有什么问题。您也可以使用缓存,这将以类似的方式工作。缓存为您提供了额外的好处,即能够根据您的选择定时使缓存无效。
发布于 2011-11-11 22:28:05
这看起来是一个很好的解决方案。您可能希望使用密封的类,以避免子类干扰它。
全局状态的问题在于它何时被应用程序更改。在这种情况下,这不是问题。
发布于 2011-11-11 22:38:29
您应该了解静态属性是如何存储的。
粗略地说,所有静态都放在RuntimeType的实例中(反过来,它是在调用静态ctor时创建的)。通过C#的CLR详细描述了这种机制。
鉴于此,这个集合将在所有实例之间共享,但您应该记住所有潜在的内存泄漏(想象一下当您订阅集合事件时,所有页面即使在关闭时也变得可访问的情况)。
此方法的第二个缺点是此集合不是最新的。第三个缺点是,您需要注意此集合的线程安全性,这反过来会损害您的性能。
https://stackoverflow.com/questions/8095330
复制相似问题