小操作中的内存泄漏

时间:2014-10-06 17:16:48

标签: c# memory-leaks

对于非常大的字符串,此语句中可能存在内存泄漏(tempText可能会增长到大约10mb)。

string strXML = new string(tempText.Where(ch => XmlConvert.IsXmlChar(ch)).ToArray());

即使退出该功能,分配给strXML的内存也不会被释放。而且我已多次调用此函数。任何可能的解决方案,没有这个字符串作为类变量? 我对C#内存管理不是很熟悉,有人可以对这个问题有所了解吗?

2 个答案:

答案 0 :(得分:2)

垃圾收集器不会收集其生命周期结束的实例。它根据它的感知需求定期执行,以释放内存。在任何有根对象长时间引用之后,该字符串将在某个不确定的时间点最终收集。

答案 1 :(得分:0)

当你构建一个大对象时,它将比其他小对象在内存中保留更长的时间。

阅读大对象堆和第2代垃圾收集......它具有技术性,但这两个术语应该足以指出这里发生了什么。

这就是为什么你没有看到垃圾收集器以你想要的速度回收内存。

为了克服这个问题,要么分配工作缓冲区一次并重复使用它们,要么以较小的块处理数据。