我有一个只读列表,可以在应用程序的所有实例中共享,并且不会经常更改。在静态类上创建属性以访问此列表是一种好习惯吗?列表从静态构造函数中的数据库填充。将应用程序池设置为每晚重新循环可以保证列表每天都是最新的正确吗?有什么理由这是个坏主意吗?谢谢!
答案 0 :(得分:2)
这看起来是一个很好的解决方案。您可能希望使用密封类,以避免子类弄乱它。
全局状态的问题在于应用程序正在更改它。在这种情况下,这不是问题。
答案 1 :(得分:2)
静态类没有错。您也可以使用缓存,它可以以类似的方式工作。缓存为您提供了额外的好处,可以在您选择的时间基础上使缓存无效。
答案 2 :(得分:0)
您应该了解静态属性的存储方式。
粗略地说,所有静态都放在RuntimeType的实例中(反过来,它是在调用静态ctor时创建的)。 CLR通过C#详细描述了这种机制。
鉴于此,此集合将在所有实例中共享,但您应该记住所有可能的内存泄漏(想象一下当您订阅集合事件时所有页面都可以访问,即使它们已经可以访问'关闭等。)
这种方法的第二个缺点是这个集合不是最新的。 第三个缺点是你需要注意这个系列的线程安全性,这反过来会损害你的性能。