一张图片胜过千言万语:为什么私有静态变量在某个时刻变为空,我能做些什么来解决?
在第一页加载,结果不是空但在某些时候,一段时间后,当Gmail动作是从Javascript调用,就变成null(在这10分钟间隔呼叫之后)。它被声明为私有静态,在索引操作中被初始化,并且应该一直存在(不为空)。
我设法留在调试模式下了几个小时运行其应用程序抓住它。
谢谢。
一张图片胜过千言万语:为什么私有静态变量在某个时刻变为空,我能做些什么来解决?
在第一页加载,结果不是空但在某些时候,一段时间后,当Gmail动作是从Javascript调用,就变成null(在这10分钟间隔呼叫之后)。它被声明为私有静态,在索引操作中被初始化,并且应该一直存在(不为空)。
我设法留在调试模式下了几个小时运行其应用程序抓住它。
谢谢。
要诊断问题,首先要仔细检查您是否正在初始化相同的AppDomain中访问变量 - 要检查该变量是否可以添加一些日志记录。可能这是一个不同的AppDomain,因为某些事件触发了IIS AppDomain池回收。 如果是的话,那么你有两个选择:
我认为这可能是 - AppDomain IIS池回收。我有重新附加扩展安装,我用它连接到IIS池,并让它在调试模式下运行。一段时间后,我回来了,发现它不再处于调试模式。这很奇怪,所以我试图再次使用该扩展重新附加,并且抛出了一条错误消息,说它无法再找到该池。我想使用会话来存储该对象,而不是静态字段,也许我会使用缓存,但不知道什么更可靠 - 会话或缓存? – monstro
@monstro:缓存数据可供任何人知道密钥。会话数据仅在特定请求中可用。所以,如果你需要为不同的用户使用不同的值 - 使用会话。如果您需要在所有用户之间共享价值 - 请使用缓存。 –
会话可能会过期,数据将丢失,而缓存数据可能会从其他会话访问,这可能会造成安全威胁。 这一切都取决于你的要求。 我首先选择了会议https://msdn.microsoft.com/en-us/library/ms972429前请阅读。aspx,如果它不适合 - 探索其他选项,这里简要提到https://msdn.microsoft.com/en-us/library/ms178581.aspx – ironstone13
使用静态字段是一个不好的做法,以保持网络应用程序中的东西。请改用.net缓存或会话。我认为在你的情况下,该静态字段的值可能由垃圾收集器处理。实际上,您可以通过一些分析器检查它,或使用自定义一次性类型,并尝试在处理期间记录该通过。 –