使用System.Threading.ReaderWriterCount获取内存不足异常

时间:2010-11-01 02:16:19

标签: c# asp.net out-of-memory

我有一个asp.net应用程序,它在DotNetNuke上运行,在加载时我们偶尔会出现内存不足的情况。

我有一个转储装入windbg。

!dumpheap -stat的结尾是

1192a588    88684      2128416 AutoMapper.MappingEngine
79333594     9482      2266348 System.Byte[]
134b0034    88695      2838240 System.EventHandler`1[[AutoMapper.TypeMapCreatedEventArgs, AutoMapper]]
13d8703c    88684      4611568 System.Collections.Generic.Dictionary`2[[Castle.DynamicProxy.Generators.CacheKey, AutoMapper],[System.Type, mscorlib]]
13d86dc8    88684      4611568 Castle.DynamicProxy.ModuleScope
13d865bc    88684      4611568 System.Collections.Generic.Dictionary`2[[AutoMapper.Internal.TypePair, AutoMapper],[AutoMapper.IObjectMapper, AutoMapper]]
79327434    88703      4612556 System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Int32, mscorlib]]
6c38e4e4    88684      5675776 System.Threading.ReaderWriterLockSlim
79330b24    87736      6458012 System.String
000d9c88      129     24186884      Free
793042f4   221202    101117016 System.Object[]
6c38e4a0 22703104    544874496 System.Threading.ReaderWriterCount

我在System.Threading.ReaderWriterCount上找不到太多信息,因为它似乎是问题所在。

可能的原因是什么?或者没有说明最好的下一步工作是什么?

基于给定答案的指针,我看了一下ReaderWriterLockSlim。我没有直接使用它,但我看到它有88684个实例,深入挖掘我看到了很多具有该实例数的类,指向AutoMapper.MappingEngine。这应该是一个单身人士,所以我已经看过它的创建地点。我怀疑它是DI容器并且已经做了一些改变,看它是否有帮助

1 个答案:

答案 0 :(得分:2)

ReaderWriterLockSlim在内存占用方面不是一个廉价的类 - 这可能就是你的ReaderWriterCount实例正在激增的原因。有关Reflector的详细信息,请参阅here

你能减少这门课的用法吗?也许不是所有这些都需要读/写锁,简单的Mutex / lock()可能有用吗?

另请注意,此课程为IDisposable - 也许您在完成这些课程后不是Dispose() -