我正在编写一个由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
在这里是什么,那么可能会节省更多的费用——也就是说,可能一开始就避免分配单个大字符串。