如何“处置”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访问该文件。在方法运行时,哪个进程阻止访问它?
答案 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,垃圾收集器将在需要时将其删除。