2

我们的应用程序正在泄漏内存。我们还没有在它上面运行内存分析器。我在 CLR 2(.NET 2、.NET 3.5)中发现了大量关于该漏洞的博客文章和其他内容。所以我想知道是否有人知道这是否仍然是 CLR 4 (.NET 4) 中的问题..

(我在 SO 上发现了这个:Are there still known memory leaks with XMLSerialization in .Net 3.5?

4

2 回答 2

0

我可以确认 XmlSerializer 的行为仍与旧 .NET 版本相同。解决此泄漏的一种方法是实现一个小的缓存机制,如下所述:

指定 XmlRootAttribute 时的 XmlSerializer 性能问题

于 2013-09-08T16:01:08.663 回答
0

我在 SO 上找到的最佳答案是: https ://stackoverflow.com/a/36123026/2941313

如果您点击有关 XmlSerializer 的 msdn 页面的链接,您仍然可以看到此评论:

为了提高性能,XML 序列化基础结构动态生成程序集以序列化和反序列化指定类型。基础结构查找并重用这些程序集。此行为仅在使用以下构造函数时发生:

  • XmlSerializer.XmlSerializer(类型)
  • XmlSerializer.XmlSerializer(类型,字符串)

如果您使用任何其他构造函数,则会生成同一程序集的多个版本并且永远不会卸载,这会导致内存泄漏和性能下降。最简单的解决方案是使用前面提到的两个构造函数之一。否则,您必须将程序集缓存在 Hashtable 中,如下例所示。

还有一些正确的例子......所以我想,答案是肯定的,但你可以解决这些内存问题。

于 2016-06-20T08:10:45.087 回答