处理XDocument对象

时间:2012-10-13 16:51:17

标签: c# xml linq-to-xml

如何“处置”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

我在我调用命令行工具的行上设置了一个断点,然后尝试自己手动打开文件,但是在我停止调试器之前它不会加载。

编辑:谢谢您的回答。我已经缩小了问题..文件保存后,断言点“Process p = ...”,我能够打开文件,但我无法访问它使用http://qualifiedapppath/path/file.xml,我使用的命令行工具只接受一个URL作为参数。停止调试器后,我可以通过http访问该文件。在方法运行时,哪个进程阻止访问它?

3 个答案:

答案 0 :(得分:6)

XDocument是一个存储XML文档的内存中副本的类。类实现IDisposable,因为它们使用非托管资源其他而不是内存。内存已经由垃圾收集器管理。

由于XDocument只占用内存,因此不需要Dispose方法。

答案 1 :(得分:1)

不,你没有 - 它甚至没有实现IDisposable。 XDocument和XElement类使用XmlReader,并为您处理基础读取器的处理。只需右键单击XDocument类并选择 Go To Definition ,您就可能找不到此类实现的IDisposable。

要回收内存,请将XDocument对象引用设置为null,GC将重新收集已获取的内存。

<强>增加:

对于问题的第二部分,如果文件在本地以这种方式可用,请使用此Uri:

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

您还可以使用以下代码验证文件位置:

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

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

答案 2 :(得分:1)

它没有实现IDisposable,所以如果你只想释放它的内存,将所有引用设置为null,垃圾收集器将在需要时将其删除。