2009-08-07 15 views
0

私はNSDictionary(それはラムで最大〜2ギガ程度)に格納された大量のデータを扱う必要があるObjective-cのプロジェクトに取り組んでいます。私が前もって計算したすべての計算の後、必要に応じて元のファイルを再解析するのではなく、データを保存/ロードする方が速いようです。大きなオブジェクトをファイルに保存する

大量のデータを保存するようになりました。私はNSKeyedUnarchiver[NSDictionary writeToFile:atomically:]を使ってみましたが、どちらもmallocエラーで失敗しました(____バイトを割り当てられません)。

私はSO、AppleのDevフォーラム、Googleを見てきましたが、何も見つかりませんでした。一度にすべてではなくビット単位でファイルを作成するほうが良いのではないかと思いますが、既存のファイルに追加することはできません。私は小さなファイルの束で完全に保存することに反対していないが、私はむしろ1つの大きなファイルを使用します。

ありがとうございます!

さらに詳しい情報が含まれています:テキストファイルからすべての情報を取っていないので、私はどれくらいのオーバーヘッドを私に与えるのか分かりません。NSDictionary私は1.5ギガバイトのファイルを持っています(そのうちの1/2を保持しています)、ラムで1ギガから900メガになることが判明しました。最終的に追加する必要のあるデータがいくつかありますが、すでにメモリにロードされているものを参照して構築されます。サイズを倍にしてはいけませんが、近いことがあります。

データはすべてシリアルであり、ストレージ内で分離することができますが、すべてを実行するためにメモリに格納する必要があります。私は現在、整数/文字列のペアを持っており、最終的に文字列/文字列のペア(すべての値が別の文字列のキーでもあるため、最終的な記憶域要件は現在持っているものと同じ文字列になります)参照の束)。

最後に、〜300万の文字列を他の文字列と関連付ける必要があります。しかし、唯一の重要なことは、それらの文字列の関係です - 私はそれらのすべてをハッシュすることができますが、NSNumberNSDictionaryとしてオブジェクトが必要)だけで多くのオーバーヘッドを与えるかもしれません。

+0

どのくらいのデータがデータで、NSDictionaryからのオーバーヘッドはいくらですか? このように多くのデータを管理するには、手作りのコードを書くことを検討する価値があります。 コンテキストを提供できますか?データは階層的であるかシリアルですか?それは分離可能か統合されていますか? –

答えて

0

NSDictionaryは、永続性のためではなく、探しているスケーラブルなストレージを提供するわけではありません。独自のタイプのデータ構造/直列化プロセスを実装する必要があります。

埋め込みsqlliteデータベースの使用を検討しましたか?その後、データを処理することができますが、おそらくデータ構造のフラグメントを一度にロードするだけです。

+0

sqliteデータベースを使用しました。ありがとう! – bobidden

0

可能であれば、アプリケーションを64ビットモードで再構築すると、より大きなヒープスペースが得られます。

これはオプションではない場合は、独自のデータ構造を作成し、多くのメモリを割り当てない独自のロード/セーブルーチンを定義する必要があります。

+0

これは間違っています。あなたのGUIは、Leopardの時点で64ビットになることができます。 – Wevah

+0

それどころか、その一部は間違っていました。 ;) – Wevah

+0

何らかの理由で、64ビットGUIが10.6の機能であると考えていました。私は私の答えを編集しました。 –

関連する問題