在我们的ASP.NET应用程序访问内部Web服务上运行压力测试后,我们的中间层服务器(我们托管ASMX .NET 3.5 Web服务)显示了接近1GB的内存消耗。
在检查来自中间层服务器的内存转储后,我发现了Web服务运行时本身引用的超过1000个Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer对象。
这与我们的自定义对象如何在Web服务层中进行序列化/反序列化有关吗?任何人都可以对此有所了解吗?
当我这样做时!gcroot对这些1000个对象中的一些,我得到了以下描述: (Microsoft.Practices.EnterpriseLibrary.Common.Configuration.Storage.ConfigurationChangeFileWatcher) - > 1c4bb450(System.Threading.Thread) - > 18236aa0(System.Runtime.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 +桶[]) - > 1c24b934(System.Web.Caching.CacheEntry) - > 18363994(System.Web.Services.Protocols.SoapServerType) - > 183639c4(System.Collections.Hashtable) - > 1c24aa5c(System.Collections.Hashtable +桶[]) - > 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 +桶[]) - > 1c5a580c(System.Web.Caching.CacheEntry) - > 109e6e34(System.Web.Services.Protocols.SoapServerType) - > 109e6e64(System.Collections.Hashtable) - > 1c5a4fcc(System.Collections.Hashtable +桶[]) - > 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 +桶[]) - > 181ee124(System.Web.Caching.CacheEntry) - > 10350eac(System.Web.Services.Protocols.SoapServerType) - > 10350edc(System.Collections.Hashtable) - > 181ed260(System.Collections.Hashtable +桶[]) - > 181ed148(System.Web.Services.Protocols.SoapServerMethod) - > 181eb708(Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer61)
由于 BK
答案 0 :(得分:1)
您可能想尝试使用Red Gate中的ANTS Memory Profiler设置代码。
答案 1 :(得分:1)
我强烈建议我们使用来自http://memprofiler.com/download.aspx的简单命名的 .Net Memory Profiler 。
您可以免费使用完整版14天。
我发现它对解决此类问题非常有用。它会显示参考树。解决这些类型的问题非常容易。