LZMASDKをiPhone/iPadアプリで使用しようとしています。出発点は、Mo Dejongが提供するiPhone用のLZMAサンプルプロジェクトでした 。https ://github.com/jk/lzmaSDK オリジナルはここにあります:http: //www.modejong.com/iOS/lzmaSDK.zip (両方を試しましたが、両方から同じ結果が得られました)。
問題は、抽出が.7zに非圧縮で含まれているのと同じ量のRAMを使用することです。言い換えれば、私が40MBの圧縮ファイルを持っているとすると、非圧縮ファイルは約250MBのバイナリsqlite DBであり、ファイルを250MBまで解凍すると、徐々にメモリを消費します。これにより、iPad1またはiPhone4(256MB RAM)より前のものがクラッシュします。多くの人が最終的にこの同じ問題に遭遇するだろうと私は感じているので、解決策は多くの開発者を助けることができます。
私はもともと、Windowsベースの7-zip(最新バージョン)と16MBの辞書サイズを使用してPC上で.7zファイルを作成しました。解凍するのに必要なRAMは18MBだけです(これは、タスクマネージャーを確認しているPCでテストする場合です)。また、keka(オープンソースのmacアーカイバ)を使用してアーカイブを作成しようとしましたが、何も解決されませんでしたが、keka自体がmacでファイルを抽出するときに19MBのRAMしか使用していないことを確認できます。次のステップは、KekaのソースコードをLZMASDKのソースコードと比較することだと思います。
.7zファイルを作成するときに、さまざまな辞書サイズやその他の設定を試してみましたが、何も役に立ちませんでした。また、圧縮する前に単一のバイナリファイルを24個の小さな部分に分割しようとしましたが、それも役に立ちませんでした(24個を抽出するために250MBを超えるRAMを使用します)。
元のコードに加えた唯一の変更は、より大きな.7zファイルを使用することであったことに注意してください。また、抽出が完了するとすぐにRAMが解放されますが、それは役に立ちません。本来のように抽出するようにRAMを解放していないように感じます。または、実行が完了するまでコンテンツ全体をRAMに入れてから、RAMから移動しているように感じます。また、Macアプリを使用して同じファイルを抽出しようとすると、インストルメントを実行しているときに同じ動作が見られません(たとえば、StuffIt Expanderは、ファイルの抽出中に約60MBのRAMで最大になりました。Keka、オープンソースのMacアーカイバは19MBのRAMで最大になりました)。
私は(まだ)mac / xcode / Objective-cの開発者ではないので、これについての助けをいただければ幸いです。代わりにzipまたはrarを使用することもできますが、LZMAを使用するとはるかに優れた圧縮が得られるため、可能な限りこのソリューションを使い続けたいと思いますが、クラッシュせずに動作させる必要があります。
ありがとう!