2009-08-07 2 views
0

Я работаю над проектом в Objective-c, где мне нужно работать с большими объемами данных, хранящимися в NSDictionary (это около max ~ 2 гигабайтов в памяти). После всех вычислений, которые я накладываю на него, кажется, что было бы быстрее сохранять/загружать данные по мере необходимости (по сравнению с повторным анализом исходного файла).Сохранение больших объектов в файл

Итак, я начал изучать сохранение большого количества данных. Я пробовал использовать NSKeyedUnarchiver и [NSDictionary writeToFile:atomically:], но оба отказались с ошибками malloc (не могу выделить ____ байтов).

Я осмотрел SO, форумы Dev от Apple и Google, но не смог ничего найти. Мне интересно, может ли лучше создать файл побито, а не сразу, но я никак не могу добавить к существующему файлу. Я не полностью против сохранения с кучей небольших файлов, но я бы скорее использовал один большой файл.

Спасибо!

Отредактировано для включения дополнительной информации: Я не уверен, сколько накладных расходов NSDictionary дает мне, поскольку я не беру всю информацию из текстовых файлов. У меня есть файл с 1,5 гигабайтами (из которых я держу ~ 1/2), и он оказывается около 900 мегабайт за 1 гигабайт. Там будет еще несколько данных, которые мне нужно добавить в конце концов, но он будет построен со ссылками на то, что уже загружено в память, - оно не должно удваивать размер, но может приблизиться.

Данные все серийные и могут быть разделены на хранение, но все они должны быть в памяти для выполнения. В настоящее время у меня есть пары integer/string и в конечном итоге получаются пары строк/строк (все значения также являются ключом для другого набора строк, поэтому конечные требования к хранилищу будут такими же строками, которые у меня есть, плюс куча ссылок).

В конце концов, мне нужно будет связать ~ 3 миллиона строк с другим набором строк. Тем не менее, единственная важная вещь - отношения между этими строками - я мог бы хэш их всех, но NSNumber (как NSDictionary нуждается в объектах) мог бы дать мне столько же накладных расходов.

+0

Сколько данных является данными и сколько издержек из NSDictionary? С таким большим количеством данных, возможно, стоит рассмотреть возможность написания кода с ручным управлением для управления всем этим. Можете ли вы предоставить какой-то контекст? Является ли иерархия данных или серийная? Разделяема ли она или интегрирована? –

ответ

0

NSDictionary не даст вам масштабируемое хранилище, которое вы ищете, по крайней мере, не для настойчивости. Вы должны реализовать свой собственный тип структуры данных/процесс сериализации.

Считаете ли вы использование встроенной базы данных sqllite? Затем вы можете обрабатывать данные, но, возможно, загружать только фрагмент структуры данных за раз.

+0

Работала база данных sqlite. Благодаря! – bobidden

0

Если вы можете, перестройка приложения в 64-битном режиме даст вам гораздо большую площадь кучи.

Если это не вариант для вас, вам необходимо создать свою собственную структуру данных и определить свои собственные программы загрузки/сохранения, которые не выделяют столько памяти.

+0

Это неверно; ваш графический интерфейс может быть 64-битным с Leopard. – Wevah

+0

Вернее, часть этого была неправильной. ;) – Wevah

+0

К сожалению. По какой-то причине вы считали, что 64-битный графический интерфейс был 10.6. Я отредактировал свой ответ. –

Смежные вопросы