0

Android プロジェクトで Simple 2.4.1 ライブラリを使用しています。700 kB (~6k 行) の XML ファイルを処理しようとすると、この OutOfMemory エラーが発生しました。ここでの処理は、ファイルを読み取り、計算を行い、結果を新しいファイルに書き込むことを意味します。600 kB のファイルで問題なく動作しましたが、少なくとも同じエラーはまだ発生していません。

XML は次のようになります。

<items>
    <item1 id="1">
        <subitem1 id="1">
            <subsubitem1 id="a">
                <iteminfo>
                    <info>blublub</info>
                    <info>blublub</info>
                </iteminfo>
            </subsubitem1>
            <subsubitem1 id="b">
                <iteminfo>
                    <info>blublub</info>
                    <info>blublub</info>
                </iteminfo>
            </subsubitem1>
        </subitem1>
    </item1>
</items>

これに対する回避策はありますか?

4

3 に答える 3

0

これは単に、何かをせずにメモリに保持しすぎた場合の可能性があります。考えてみれば、700kbのファイルをメモリに読み込んでいて、残りのxml解析、アプリケーション、およびデバイスにメモリとCPU時間を必要とするその他のアプリケーションのオーバーヘッドを追加すると、要約すると、これは良い考えではありません。

そのような回避策はありません。おそらくほとんど必要ないのに、700kbのxmlをメモリに保持しようとしているので、プログラミングの意味からはあまり良くないでしょう。

リソースを解放するために、できるだけ早くこのデータをメモリから削除する方法を見つけることをお勧めします。見つけた要素を意味のある方法でファイルなどに保存し、データベースを介してインデックスを作成できます。これにより、大量のデータを保持できますが、すべてをメモリに保持する代わりに、データベースで検索して、特に必要なデータをメモリに戻すだけです。このようにして、リソースの使用を制限し、アプリケーションをダウンロードする人が、メモリを大量に使用しているときに不審に思うことはありません。

于 2011-03-10T13:50:34.367 に答える
0

XML ドキュメント全体を一度に解析する代わりに、SAX パーサーを使用できます。SAX パーサーは XML ドキュメントをストリームとして読み取り、特定のタグに到達すると適切なイベントが発生します。SimpleXML のようなものを使用するほど便利ではありません。

役立つチュートリアルは次のとおりです。 http://www.ibm.com/developerworks/opensource/library/x-android/

于 2011-03-10T14:31:32.820 に答える