.NET XmlDocumentクラスを使用して XML ファイルを読み取る Mono for Android アプリケーションがあります。各ドキュメントは約 180K です。
各ドキュメントを解析し、独自の内部データ構造を作成した後、XmlDocumentインスタンスへの参照を残さないため、ガベージ コレクションの対象になります。
ただし、問題は、コレクションが発生するまでに 5 ~ 6 秒かかることです。5 ~ 6 秒以内に複数のドキュメントをロードすると、アプリが OS にクラッシュし、エラー メッセージが出力されたり、例外がスローされたりすることはありません。スレッド12が終了したとだけ言っています(私は余分なスレッドを作成していないので、なぜそれがスレッド12なのかわかりません-XmlDocumentのスレッドですか?)。
ドキュメント 1 をロードしてから 5 秒待ってからドキュメント 2 をロードし、5 秒待ってからドキュメント 3 をロードすると、すべて問題ありません。
その場合、5 秒間の待機中に、GC が数回起動し、4 ~ 5 サイクルで合計約 1MB のメモリが解放されるのがわかります (一部は EXPLICIT とマークされ、一部は CONCURRENT とマークされています)。
また、見つけた記事で示唆されているように、完了したら xmlDocument.RemoveAll() への呼び出しを追加しようとしました。その後、GC.Collect() への呼び出しも追加しました。少しは役に立ちましたが、それでもクラッシュする頻度はやや減りました。
使用可能なメモリを増やすか、XmlDocumentの動作を改善する方法はありますか?