7

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からファイルにアクセスできるようになりました。メソッドの実行中にどのプロセスがアクセスを妨げていますか?

4

3 に答える 3

6

XDocument は、XML ドキュメントのメモリ内コピーを格納するクラスです。クラスはメモリ以外アンマネージ リソースを使用するため、IDisposable を実装します。メモリは、ガベージ コレクターによって既に適切に管理されています。

XDocument はメモリのみを消費するため、Dispose メソッドは必要ありません。

于 2012-10-13T17:06:58.523 に答える
3

いいえ、実装していません。IDisposableも実装していません。XDocumentクラスとXElementクラスは、内部でXmlReaderを使用し、基盤となるリーダーの破棄を処理します。XDocumentクラスを右クリックし、[定義に移動]を選択するだけで、このクラスによって実装されたIDisposableが見つからない場合があります。

メモリを再利用するには、XDocumentオブジェクト参照をnullに設定すると、GCは取得したメモリを再収集します。

追加した:

質問の2番目の部分では、ファイルが次のようにローカルで利用できる場合は、このURIを使用します。

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

次のコードを使用して、ファイルの場所を確認することもできます。

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

IISで仮想ディレクトリを構成してそのファイルを見つける場合は、HTTPを使用できます。

于 2012-10-13T16:56:16.683 に答える
1

IDisposable を実装していないため、メモリを解放するだけの場合は、すべての参照を null に設定すると、必要に応じてガベージ コレクターによって削除されます。

于 2012-10-13T16:57:32.270 に答える