我有一个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容器并且已经做了一些改变,看它是否有帮助
答案 0 :(得分:2)
ReaderWriterLockSlim
在内存占用方面不是一个廉价的类 - 这可能就是你的ReaderWriterCount
实例正在激增的原因。有关Reflector的详细信息,请参阅here。
你能减少这门课的用法吗?也许不是所有这些都需要读/写锁,简单的Mutex
/ lock()
可能有用吗?
另请注意,此课程为IDisposable
- 也许您在完成这些课程后不是Dispose()
-