小操作内存泄漏

本文关键字:泄漏 内存 操作 | 更新日期: 2023-09-27 18:25:46

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

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

分配给strXML的内存即使在退出该功能后也不会释放。我必须多次调用这个函数。有什么可能的解决方案,而不将此字符串作为类变量?我对C#内存管理不是很熟悉,有人能谈谈这个问题吗?

小操作内存泄漏

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

当您构建一个大对象时,它在内存中的停留时间将比其他小对象长得多。

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

这就是为什么垃圾收集器不能像您希望的那样快速地回收内存的原因。

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