16

iPadで非常に大きなjsonファイルを解析しようとしています。ファイルサイズは 50 から 100 mb の間で変化します (最初のファイルがあり、毎月 1 つの新しい完全なデータ セットがあり、ダウンロードされ、解析され、coredata に保存されます)

企業向けソリューションとしてこのアプリを構築しています.jsonファイルには機密性の高い顧客データが含まれており、オフラインでも機能するようにiPadにローカルに保存する必要があります。ファイルが 20 MB 未満の場合は機能しましたが、データのセットが大きくなり、本当に解析する必要があります。解析中にメモリ警告が表示され、3 回目の警告の後、クラッシュします。私はいくつかの異なる Core Data エンティティを持っており、json ファイルからのすべての値を設定しているだけです (アプリが初めて起動されたとき)。すべてが完了したら、[context save].

そのような巨大なファイルを処理する方法について、誰かが私にアドバイスをくれることを望んでいました. json ファイルをいくつかの小さな json ファイルに分割し、複数のスレッドで解析することを考えていましたが、それが正しいアプローチかどうかはわかりません。大きな問題の 1 つは、ファイル全体がメモリに保持されていることだと思います。ファイルをメモリに「ストリーミング」する方法などがあるのでしょうか。

ファイルの解析にJSONKit ( https://github.com/johnezang/JSONKit ) を使用しています。これが最速のものであると読んだためです (おそらく、メモリ上でより簡単になる遅いものがあるのでしょうか?)。

前もって感謝します。

4

2 に答える 2

21

1) データをファイルに書き込み、NSData のdataWithContentsOfFile:options:error:を使用して、 NSDataReadingMappedAlwaysおよびNSDataReadingUncachedフラグを指定します。これにより、システムは mmap() を使用してメモリ フットプリントを削減し、ファイル システム キャッシュにメモリ ブロックを負担させないように指示されます (これにより速度は遅くなりますが、iOS への負担は大幅に軽減されます)。

2) YAJL SAX スタイルの JSON パーサーを使用して、デコード時にオブジェクトを取得できます。

注: 2) は実行していませんが、1) で具現化された手法を使用しています。

3)私は自分自身でそのようなものが必要になり、任意の非同期ダウンローダー(自分のものを含む)に関連付けることができるSAX-JSON-Parser-ForStreamingDataを書きました。

于 2013-04-10T17:51:59.400 に答える