Утечка памяти .NET

После проведения нашего стресс-тестирования доступа нашего приложения ASP.NET к внутренним веб-службам наш сервер среднего уровня (где мы размещаем веб-службы ASMX .NET 3.5) показал потребление памяти, близкое к 1 ГБ.

При просмотре дампа памяти с сервера среднего уровня я обнаружил более 1000 объектов Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer, на которые ссылается сама среда выполнения веб-служб.

Связано ли это с тем, как наши пользовательские объекты сериализуются/десериализуются на уровне веб-сервисов? Может ли кто-нибудь пролить больше света на это?

Когда я выполнил !gcroot для некоторых из этих 1000 объектов, я получил следующую трассировку: .Remoting.Contexts.Context) -> 18236914 (System.AppDomain) -> 10409dc4 (System.ResolveEventHandler) -> 10409494 (System.Web.Compilation.BuildManager) -> 10409f30 (System.Web.Compilation.MemoryBuildResultCache) -> 103d115c (System.Web.Caching.CacheMultiple)-> 103d1174(System.Object[])-> 103d2034(System.Web.Caching.CacheSingle)-> 103d2080(System.Collections.Hashtable)-> 1c24b97c(System.Collections.Hashtable +bucket[])-> 1c24b934(System.Web.Caching.CacheEntry)-> 18363994(System.Web.Services.Protocols.SoapServerType)-> 183639c4(System.Collections.Hashtable)-> 1c24aa5c(System.Collections.Hashtable +bucket[])-> 1c24a458(System.Web.Services.Protocols.SoapServerMethod)-> 1c248ae4(Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer26)

(Microsoft.Practices.EnterpriseLibrary.Common.Configuration.Storage.ConfigurationChangeFileWatcher)-> 1c5ac4b0(System.Threading.Thread)-> 1c52b5f0(System.Runtime.Remoting.Contexts.Context)-> 1c52b464(System.AppDomain)-> 18823880 (System.ResolveEventHandler) -> 18822f50 (System.Web.Compilation.BuildManager) -> 188239e0 (System.Web.Compilation.MemoryBuildResultCache) -> 144631fc (System.Web.Caching.CacheMultiple) -> 14463214 (System.Object [] )-> 14465088(System.Web.Caching.CacheSingle)-> 144650d4(System.Collections.Hashtable)-> 1446510c(System.Collections.Hashtable+bucket[])-> 1c5a580c(System.Web.Caching.CacheEntry)- > 109e6e34(System.Web.Services.Protocols.SoapServerType)-> 109e6e64(System.Collections.Hashtable)-> 1c5a4fcc(System.Collections.Hashtable+bucket[])-> 1c5a4a54(System.Web.Services.Protocols.SoapServerMethod )-> 1c5a44f4(Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer28)

(Microsoft.Practices.EnterpriseLibrary.Common.Configuration.Storage.ConfigurationChangeFileWatcher) -> 108b38f0 (System.Threading.Thread) -> 1c1155ec (System.Runtime.Remoting.Contexts.Context) -> 1c115460 (System.AppDomain) -> 1030d348 (System.ResolveEventHandler)-> 1030ca18(System.Web.Compilation.BuildManager)-> 1030d4a0(System.Web.Compilation.MemoryBuildResultCache)-> 102d7ae4(System.Web.Caching.CacheMultiple)-> 102d7afc(System.Object[] )-> 102d7b1c(System.Web.Caching.CacheSingle)-> 102d7b68(System.Collections.Hashtable)-> 102d7bac(System.Collections.Hashtable+bucket[])-> 181ee124(System.Web.Caching.CacheEntry)- > 10350eac(System.Web.Services.Protocols.SoapServerType)-> 10350edc(System.Collections.Hashtable)-> 181ed260(System.Collections.Hashtable+bucket[])-> 181ed148(System.Web.Services.Protocols.SoapServerMethod )-> 181eb708(Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer61)

Спасибо БК


person BK Krish    schedule 28.07.2010    source источник
comment
Я настоятельно рекомендую перейти на WCF.   -  person Andrey    schedule 28.07.2010
comment
Мне бы хотелось. Это существующий код, и мы недавно обновили его до ASP.NET 3.5.   -  person BK Krish    schedule 28.07.2010


Ответы (2)


Вы можете попробовать инструментировать свой код с помощью профилировщика памяти ANTS от Red. Ворота.

person Vitor Py    schedule 28.07.2010

Я бы настоятельно рекомендовал нам просто названный .Net Memory Profiler с сайта http://memprofiler.com/download.aspx.

Вы можете использовать полную версию в течение 14 дней бесплатно.

Я нашел это полезным для такого типа решения проблем. Он покажет вам справочное дерево. Делая исправление такого рода проблем действительно легким.

person morechilli    schedule 24.08.2010