c# - WCF 服务引用使用 XmlSerializer 创建临时动态程序集

标签 c# .net wcf memory-leaks .net-assembly

我一直在尝试诊断我认为有据可查的内存泄漏,其中可执行文件的内存大小由于 WCF 服务引用(或旧式 Web 引用)而增加,因为它会动态创建动态临时程序集一个 XmlSerializer

我找到了以前的 stackoverflow 帖子 here它还提供了this link其中比较详细地描述了这个问题。

它不提供有关如何缓存 XmlSerializer/MessageTypeConverter 以防止创建这些动态程序集的任何想法。

所以我的问题是 - 当序列化发生在 WCF/.NET 基础结构层的深处时,如何防止 XmlSerializer 生成动态程序集?

感兴趣的是,这里是程序集的完整堆栈跟踪(由 ANTS 内存分析器提供:

System.Reflection.Emit.AssemblyBuilder.DefineDynamicModule(string name)
System.Xml.Serialization.CodeGenerator.CreateModuleBuilder(Emit.AssemblyBuilder assemblyBuilder, string name)
System.Xml.Serialization.TempAssembly.GenerateRefEmitAssembly(Serialization.XmlMapping[] xmlMappings, Type[] types, string defaultNamespace, Policy.Evidence evidence)
System.Xml.Serialization.TempAssembly..ctor(Serialization.XmlMapping[] xmlMappings, Type[] types, string defaultNamespace, string location, Policy.Evidence evidence)
System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(Serialization.XmlMapping xmlMapping, Type type, string defaultNamespace, string location, Policy.Evidence evidence)
System.Xml.Serialization.XmlSerializer..ctor(Type type, Serialization.XmlAttributeOverrides overrides, Type[] extraTypes, Serialization.XmlRootAttribute root, string defaultNamespace, string location, Policy.Evidence evidence)
System.Xml.Serialization.XmlSerializer..ctor(Type type, Serialization.XmlAttributeOverrides overrides, Type[] extraTypes, Serialization.XmlRootAttribute root, string defaultNamespace, string location)
System.Xml.Serialization.XmlSerializer..ctor(Type type, Serialization.XmlRootAttribute root)

编辑:我还应该提一下,我知道这个 MSDN article ,但是即使这样,我的可执行文件内存也会增加(使用上面的配置文件),因此无论出于何种原因,MyLIbrary.XmlSerializers.dll 似乎都没有被使用,或者正在使用,但没有被缓存。

最佳答案

事实证明,在我们的代码中有一个使用 attributeroot 构造函数重载来实例化新 XmlSerializer 的显式调用。更正此问题解决了我们的问题。

我们还设法找到一种方法来手动覆盖在创建操作行为的 wcf 中使用的 XmlSerializer。

关于c# - WCF 服务引用使用 XmlSerializer 创建临时动态程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29510076/

相关文章:

c# - WCF .svclog 文件的 Web API 2 等价物

wcf - 在多个环境中测试 Web 服务

c# - 并行 Linq : Ordered treatment

c# - 如何从 URL 获取数据并将其保存到 C#.NET 中的二进制文件中,而不会造成编码困惑?

.net - Azure 队列触发器立即达到 MaxDequeueCount

c# - 为什么只有一些子元素的属性由其父元素定义

asp.net - 作为 Windows 服务托管的 c# WCF Restful Web 服务的跨源资源共享

c# - 在 C# Timer 中完成一小时后准确触发滴答事件

c# - 从方法返回通用任务时发生转换错误

c# - 从 Viewbag.List 中查找项目