具有InProc会话状态的.NET托管内存损坏方案

时间:2014-04-02 18:44:14

标签: asp.net .net session clr managed

在我使用.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">

有哪些可能的解释可以解释这个问题?很想听听关于什么类型的托管内存腐败的理论,所以我可以更多地阅读它。

0 个答案:

没有答案