最初の XmlDocuments をメモリに保持せずに 2 つの XmlDocuments を組み合わせる方法はありますか?
最大 100 個の大きな (~300MB) XML ファイルのリストを循環し、それぞれに最大 1000 個のノードを追加し、プロセス全体を数回繰り返す必要があります (メモリを節約するために新しいノード リストがクリアされるため)。XmlDocument
現在、新しいノードを追加する前に全体をメモリにロードしますが、これは現在維持できません。
これについてどうするのが最善の方法だと思いますか? いくつかのアイデアがありますが、どれが最適かわかりません。
- 全体
XMLDocument
をロードするのではなく、XmlReader
と をXmlWriter
同時に使用して一時ファイルに書き込みます。一時ファイルはその後名前が変更されます。 - 新しい
XmlDocument
ノードのみを作成し、既存のファイルに手動で書き込みます (つまり、file.WriteLine( "<node>\n" )
- 他の何か?
どんな助けでも大歓迎です。
コメントのいくつかに答えて、いくつかの詳細を編集します。
このプログラムは、いくつかの大きなログを XML に解析し、ソースごとに異なるファイルにグループ化します。1 日に 1 回実行するだけで済み、XML が書き込まれると、データに関するレポートを提供する軽量の独自のリーダー プログラムが作成されます。プログラムは 1 日に 1 回しか実行する必要がないため、遅くなる可能性がありますが、サーバー上で実行され、主にファイルの圧縮と転送などの他のアクションを実行します。
データベースの方が簡単かもしれませんが、会社はすぐにこれを行うつもりはありません!
そのままでは、プログラムは開発マシン上で最大数 GB のメモリを使用して実行されますが、サーバー上で実行するとメモリ不足の例外がスローされます。
最終編集 このタスクは非常に優先度が低いため、データベースを取得するのに余分な費用がかかるだけです (ただし、mongo について調べます)。
ファイルは追加されるだけで、無期限に大きくなることはありません。最終的な各ファイルは 1 日分のログのみであり、新しいファイルは翌日に生成されます。
XML の有効性を確認するのが最も簡単なので、おそらく XmlReader/Writer メソッドを使用しますが、すべてのコメント/回答を考慮しました。XML ファイルをこのように大きくすることは特に良い解決策ではないことはわかっていますが、それは私が制限していることなので、与えられたすべての助けに感謝します。