我们的应用程序正在泄漏内存。我们还没有在它上面运行内存分析器。我在 CLR 2(.NET 2、.NET 3.5)中发现了大量关于该漏洞的博客文章和其他内容。所以我想知道是否有人知道这是否仍然是 CLR 4 (.NET 4) 中的问题..
(我在 SO 上发现了这个:Are there still known memory leaks with XMLSerialization in .Net 3.5?)
我们的应用程序正在泄漏内存。我们还没有在它上面运行内存分析器。我在 CLR 2(.NET 2、.NET 3.5)中发现了大量关于该漏洞的博客文章和其他内容。所以我想知道是否有人知道这是否仍然是 CLR 4 (.NET 4) 中的问题..
(我在 SO 上发现了这个:Are there still known memory leaks with XMLSerialization in .Net 3.5?)
我可以确认 XmlSerializer 的行为仍与旧 .NET 版本相同。解决此泄漏的一种方法是实现一个小的缓存机制,如下所述:
我在 SO 上找到的最佳答案是: https ://stackoverflow.com/a/36123026/2941313
如果您点击有关 XmlSerializer 的 msdn 页面的链接,您仍然可以看到此评论:
为了提高性能,XML 序列化基础结构动态生成程序集以序列化和反序列化指定类型。基础结构查找并重用这些程序集。此行为仅在使用以下构造函数时发生:
- XmlSerializer.XmlSerializer(类型)
- XmlSerializer.XmlSerializer(类型,字符串)
如果您使用任何其他构造函数,则会生成同一程序集的多个版本并且永远不会卸载,这会导致内存泄漏和性能下降。最简单的解决方案是使用前面提到的两个构造函数之一。否则,您必须将程序集缓存在 Hashtable 中,如下例所示。
还有一些正确的例子......所以我想,答案是肯定的,但你可以解决这些内存问题。