Simple XML ライブラリを使用して、Android アプリケーションで XML ファイルを処理しています。これらのファイルは非常に大きくなる可能性があり (約 1Mb)、かなり深く入れ子になる可能性があるため、かなり複雑です。
アプリが Simple API を介してこれらのファイルの 1 つを読み込むと、完了するまでに最大 30 秒かかる場合があります。現在、Simple の Persister クラスの [read(Class, InputStream)][2] メソッドに FileInputStream を渡しています。事実上、XML ノードを読み取り、データをモデル オブジェクトのインスタンスにマップして、メモリ内の XML ツリー構造を複製するだけです。
私の質問は、Android でパフォーマンスを向上させるにはどうすればよいですか? 私の現在の考えは、ファイルの内容をバイト配列に読み込み、代わりに ByteArrayInputStream を Persister の read メソッドに渡すことです。ファイルを処理する時間はもっと速くなると思いますが、ファイル全体を最初に読み取るのにかかる時間によって、節約された時間が打ち消されるかどうかはわかりません。また、メモリの制約も問題になる可能性があります。
これは愚かな用事ですか?この状況でパフォーマンスを向上させるために他にできることはありますか? そうでない場合は、ファイルの読み込みの進行状況に関するユーザーへのフィードバックを改善する必要があります。
いくつかの注意事項:
1) 使用している XML ライブラリを変更できません。問題のコードは、デスクトップ、モバイル、および Web アプリケーションで使用される「エンジン」の一部です。それを変更するためのオーバーヘッドは当分の間多すぎるでしょう。
2)データファイルはユーザーによって作成されるため、ネストのサイズ/深さを制御できません。