C#内存泄漏-XDocument



我正在编写一个由x同事编写的代码。我们有几个图像文件,我们正在将它们转换为XAML。代码使用XDocument加载图像文件(不是很大的文件,但有很多(,并在多线程上进行处理。我试着寻找每一个我认为在每次迭代完成后可以处理的对象,但问题仍然存在。如果我继续运行这个过程,它会完全消耗RAM,然后Visual Studio崩溃,最让我惊讶的是,一旦发生这种情况,我就无法在我的电脑上打开任何东西,所有抱怨内存满的事情都包括Visual Studio。

我无法在此处上传图像。

我尝试过在一个线程上运行它,尽管我遇到了GC的压力,但我仍然能够运行代码,内存一直保持良好,直到最后。

我知道我需要寻找替代方案,而不是使用XDocument,但目前这超出了范围,我需要完成代码。

你能帮帮我或者给我一些建议吗?

下面的代码是我如何在将XML发送到API进行处理之前加载它:

XDocument doc;
using (var fileStream = new MemoryStream(System.Text.Encoding.ASCII.GetBytes(Image1.sv.ToString())))
{   
doc =  XDocument.Load(fileStream);
}

然后API使用多线程处理图像文件,使用不同的方法将其转换为XAML,每种方法都使用XDocument,通过内存流加载,保存在内存中并继续处理。

我已经使用VS中的诊断工具来识别内存泄漏。

问候

new MemoryStream(Encoding.ASCII.GetBytes(someString))步骤似乎非常多余,所以我们只需。。。不这样做,并使用XDocument.Parse(someString):

var doc = XDocument.Parse(Image1.sv.ToString());

这也避免了通过ASCII丢失数据,这几乎总是错误的选择。

如果我们知道Image1.sv在这里是什么,那么可能会节省更多的费用——也就是说,可能一开始就避免分配单个大字符串。

最新更新