私はNSDictionary
(それはラムで最大〜2ギガ程度)に格納された大量のデータを扱う必要があるObjective-cのプロジェクトに取り組んでいます。私が前もって計算したすべての計算の後、必要に応じて元のファイルを再解析するのではなく、データを保存/ロードする方が速いようです。大きなオブジェクトをファイルに保存する
大量のデータを保存するようになりました。私はNSKeyedUnarchiver
と[NSDictionary writeToFile:atomically:]
を使ってみましたが、どちらもmallocエラーで失敗しました(____バイトを割り当てられません)。
私はSO、AppleのDevフォーラム、Googleを見てきましたが、何も見つかりませんでした。一度にすべてではなくビット単位でファイルを作成するほうが良いのではないかと思いますが、既存のファイルに追加することはできません。私は小さなファイルの束で完全に保存することに反対していないが、私はむしろ1つの大きなファイルを使用します。
ありがとうございます!
さらに詳しい情報が含まれています:テキストファイルからすべての情報を取っていないので、私はどれくらいのオーバーヘッドを私に与えるのか分かりません。NSDictionary
私は1.5ギガバイトのファイルを持っています(そのうちの1/2を保持しています)、ラムで1ギガから900メガになることが判明しました。最終的に追加する必要のあるデータがいくつかありますが、すでにメモリにロードされているものを参照して構築されます。サイズを倍にしてはいけませんが、近いことがあります。
データはすべてシリアルであり、ストレージ内で分離することができますが、すべてを実行するためにメモリに格納する必要があります。私は現在、整数/文字列のペアを持っており、最終的に文字列/文字列のペア(すべての値が別の文字列のキーでもあるため、最終的な記憶域要件は現在持っているものと同じ文字列になります)参照の束)。
最後に、〜300万の文字列を他の文字列と関連付ける必要があります。しかし、唯一の重要なことは、それらの文字列の関係です - 私はそれらのすべてをハッシュすることができますが、NSNumber
(NSDictionary
としてオブジェクトが必要)だけで多くのオーバーヘッドを与えるかもしれません。
どのくらいのデータがデータで、NSDictionaryからのオーバーヘッドはいくらですか? このように多くのデータを管理するには、手作りのコードを書くことを検討する価値があります。 コンテキストを提供できますか?データは階層的であるかシリアルですか?それは分離可能か統合されていますか? –