私は、xmlファイルをXPathDocumentにロードするメソッドを呼び出す非同期デリゲートを使用しています。 xmlが大きすぎてメモリに収まらない場合は、ロードが完了しません。 xmlファイルがXPathDocumentに正常に読み込まれた場合、以下のコードが動作します。私はasyncXpath.EndInvoke(result)ステートメントを実行し、CreateDocumentメソッドを終了させるタイマーイベントを使用することができましたが、XPathDocumentのロードを停止しません。私の結論は、私ができる唯一のことはアプリケーションを終了するためにApplication.Endステートメントを発行することです。 XPathDocumentの読み込みなど、ブラックボックス操作を停止する方法を知っている人はいますか?「ブラックボックス」操作を停止するにはどうすればよいですか?
delegate bool AsyncXpathQueryCaller(string xmlfile
bool found = false;
AsyncXpathQueryCaller asyncXpath = new
AsyncXpathQueryCaller(CreateDocument);
IAsyncResult result = asyncXpath.BeginInvoke(xmlfile, null, null);
while (!result.IsCompleted)
{
result.AsyncWaitHandle.WaitOne(100, false);
}
found = asyncXpath.EndInvoke(result);
private bool CreateDocument (string xmlfile)
{
XPathDocument doc = new XPathDocument(xmlfile);
}
ドキュメントが大きい場合は、前方読み取り専用リーダーを使用してデータを読み取り/処理することをおすすめします。これは速くなり、必要に応じてファイルを読み込む際に中断することもあります。 –
@Tim - XPathDocumentオブジェクトを作成する方法は非常に多くあり、そのすべてはコンストラクタがファイルの読み込みを制御できるようにします。 – KeithS
@KeithS - 私はXmlReaderの詳細を考えていました...問題のドキュメントが大きければ、一度に必要な場合はチャンク、変換/解析/ etcなどで読み取ることができます。このケースに合っているかどうかわからないので、答えではなくコメントを投稿したのです。 –