一連のフォルダーをスキャンし、それらのすべての XML ファイルを見つけ、それらを読み込んで有効性に関する最初の基本的なチェックを実行し、DB にインポートしようとする UI インポート ツールをコーディングしました (これにより、別のさらに大きな有効性の束が発生します)。チェックを実行します)。基本的なチェックまたはインポートが失敗すると、アプリは詳細なエラー メッセージをユーザーに表示するので、ユーザーはそれぞれの XML ファイルを開いて編集できます。しかし...ファイルは「別のプロセスで使用されている」ため、ユーザーはファイルを保存できません。
その段階で、すべてのインポーター オブジェクトはなくなってしまいましたが、まだガベージ コレクションが行われていないのではないかと考えたので、XML ファイルへのハンドルを開いたままにしています。そのため、チェック/インポートプロセスの後に GC.Collect() を試してみると、魔法のようにユーザーは XML ファイルを編集して保存できます。
私のコードがこれまでに XML ファイルで行ったことは次のとおりです。
XmlReader reader = XmlReader.Create(m_xmlInputFile);
m_XmlDocument = new XmlDocument();
m_XmlDocument.Load(reader);
「reader」はローカル変数なのですぐにスコープ外になり、m_XmlDocument はインポーター オブジェクトが生きている限り存続するメンバー変数です。インポーター オブジェクトは別の関数のローカル変数であるため、すべてが完了した後は、すべてが死刑になるはずです。それでも、死刑囚を待つには時間がかかりそうです...
私の場合はそれほど重要ではありませんが、好奇心から、(GC を強制する以外に) ディスク上の XML ファイルを「解放」するためにできることがあるかどうかを知りたいと思います。 /彼女の驚きのない編集。
ありがとう