簡體   English   中英

處理XDocument對象

[英]Disposing an XDocument object

如何“處置”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訪問該文件。 在方法運行時,哪個進程阻止訪問它?

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");

您還可以使用以下代碼驗證文件位置:

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

如果在IIS中配置虛擬目錄以查找該文件,則可以使用HTTP。

它沒有實現IDisposable,所以如果你只想釋放它的內存,將所有引用設置為null,垃圾收集器將在需要時將其刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM