use*_*119 5 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
Run Code Online (Sandbox Code Playgroud)
我在我调用命令行工具的行上放了一个断点,然后尝试自己手动打开文件,但是在我停止调试器之前它不会加载.
编辑:谢谢你的回答.我已经缩小的问题..保存文件后,并与断点"进程p = ...",我是能够打开文件,但使用我不能访问它http://qualifiedapppath/path/file.xml,和命令行我正在使用的工具只接受一个URL作为参数.停止调试器后,我可以通过http访问该文件.在方法运行时,哪个进程阻止访问它?
XDocument是一个存储XML文档的内存中副本的类.因为他们使用的非托管资源类实现IDisposable 其他除内存.内存已经由垃圾收集器管理.
由于XDocument只消耗内存,因此不需要Dispose方法.
不,你不知道 - 它甚至没有实现 IDisposable。XDocument 和 XElement 类在幕后使用 XmlReader 并为您处理底层读取器的处理。只需右键单击 XDocument 类并选择Go To Definition,您可能找不到该类实现的 IDisposable。
要回收内存,请将 XDocument 对象引用设置为 null,GC 将重新回收获取的内存。
添加:
对于问题的第二部分,如果文件在本地可用,请使用此 Uri:
var uri = new Uri("file:///C:/path/file.xml");
Run Code Online (Sandbox Code Playgroud)
您还可以使用这段代码验证文件位置:
if (uri.IsFile)
{
var filePath = uri.LocalPath; // C:/path/file.xml
}
Run Code Online (Sandbox Code Playgroud)
如果您在 IIS 中配置虚拟目录来查找该文件,则可以使用 HTTP。