处置的XDocument对象(Disposing an XDocument object)

2019-09-24 02:00发布

我该如何“处置”的XDocument对象? 我用它来解析XML字符串,然后将文件保存到文件系统。 在同样的方法然后我需要访问此文件,并在其上运行一个命令行工具。

代码如下:

string filepath = "...";
string filename = "...";
XDocument xdoc = XDocument.Parse(xmlString);
xdoc.Save(filepath + filename);

Process p = Process.Start(new ProcessStartInfo("rst.exe", args)); // the args use the file saved above

我把一个断点,我调用命令行工具就行了,然后试图手动打开文件自己,但它不会加载,直到我停止了调试器。

编辑:谢谢你的答案。 我已经缩小的问题..保存文件后,并与断点“进程p = ...”, 可以打开该文件,但使用我不能访问它http://qualifiedapppath/path/file.xml ,和我使用的命令行工具将只接受一个URL作为参数。 停止时,调试后,我能够通过HTTP访问文件。 什么方法阻止访问它的方法运行时?

Answer 1:

不,你没有 - 它甚至没有实现IDisposable。 该和的XDocument类的XElement使用的XmlReader在幕后和处理潜在读者的载放你。 上的XDocument类只需右键单击并选择转到定义 ,你可能找不到了IDisposable该类实现的。

回收内存,设置XDocument对象引用为null,GC会记得所获取的内存。

添加:

对于你的问题的第二部分,使用这个开放的,如果文件是本地可用这种方式:

var uri = new Uri("file:///C:/path/file.xml");

您也可以使用这段代码验证文件的位置:

if (uri.IsFile)
{
    var filePath = uri.LocalPath; // C:/path/file.xml
}

如果您在IIS中配置的虚拟目录,找到该文件,您可以使用HTTP。



Answer 2:

的XDocument是存储XML文档的内存中拷贝一个类。 因为他们使用的内存以外的非托管资源类实现IDisposable。 内存已经干练由垃圾收集管理。

由于只的XDocument内存消耗,它没有需要Dispose方法。



Answer 3:

它不实现IDisposable所以如果你只是想摆脱它的内存,设置所有引用为null,当它需要将垃圾收集器将其删除。



文章来源: Disposing an XDocument object