最近我们了解了 IIS 的 AppDomain 回收以及它如何影响将静态变量设置为其主要值(空、0 等)。
我们使用一些在静态构造函数中初始化的静态变量(首次初始化时,配置值如“小数位数”、“管理员电子邮件”等...从数据库检索),然后仅读取它们在网站执行过程中的值(value)。
解决这个问题的最佳方法是什么?一些可能的想法:
在每次检索时检查变量是否为 null/0(不喜欢它,因为可能会影响性能+花费时间将此检查添加到每个变量+添加到项目中的代码重载)
以某种方式阻止 AppDomain 回收(这种重置逻辑不会在具有静态变量的 Windows 窗体中发生,它不应该像在两种环境中使用相同的语言一样工作吗?至少在静态变量管理的标准方面) )
使用其他方式保存这些变量(但我们认为,为了将某些值用作信息作为所有用户的全局引用,静态变量是性能/编码方面的最佳选择)
<订阅在这些 AppDomain 回收中触发的事件,以便我们可以重新初始化所有这些变量(如果无法阻止回收,这可能是最好的选择...)
想法?
最佳答案
我会采用你不喜欢的方法。
Checking if variable is null/0 at each retrieval (don't like it because of a possible performance impact + time spent to add this check to each variable + code overload added to the project)
- 我认为这比退出 web.config 更快。
- 你得到一个类型化的对象
这不会影响性能,因为您不会针对每个检索请求都访问数据库。仅当您发现当前值设置为默认值时,您才会访问数据库(或任何源)。
关于c# - ASP.NET 维护静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17235193/