在我使用.NET的12年中,我曾经遇到过一个奇怪的问题。
在与同事进行各种join.me会话以验证详细信息之后,我们能够一致地重现它,即使我们重命名了会话密钥。
问题基本上是使用默认 InProc 会话提供商的 WebForms 应用:一个键/值对的分配会影响另一个(不相关的)密钥可重复。
以下是一直在重现问题的代码行:
Session[UIGlobals.SessionVariable.AgentName.ToString()] = _contact.FullName;
实际上是将_contact.FullName
分配给完全不同的会话密钥:
Session[UIGlobals.SessionVariable.IsDonorSelectionSubflow.ToString()]
显然,两个枚举值产生不同的字符串键,但这是一个可重现的结果。您可以将执行步骤重置为会话分配上方的几行,并注意它更改了不同的会话值(Session[UIGlobals.SessionVariable.AgentName.ToString()]
仍为null
)。
注意:通过即时窗口完成的分配按预期工作。
最终解决了这个问题的原因是一起删除了临时文件夹的内容:
<compilation batch="false" defaultLanguage="c#" targetFramework="4.0" optimizeCompilations="true" debug="true" tempDirectory="C:\NET_temp">
有哪些可能的解释可以解释这个问题?很想听听关于什么类型的托管内存腐败的理论,所以我可以更多地阅读它。