我有一个 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 容器并围绕它做了一些更改以查看它是否有帮助
最佳答案
ReaderWriterLockSlim
在内存占用方面并不便宜 - 这可能是您的 ReaderWriterCount
实例激增的原因。参见 here有关 Reflector 的详细信息。
你能减少这个类的使用吗?也许不是所有的都需要读/写锁,简单的 Mutex
/lock()
可能有用吗?
另请注意,此类是 IDisposable
- 也许您不是在使用完它们后 Dispose()
处理它们?
关于c# - 使用 System.Threading.ReaderWriterCount 获取内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4066286/