Nskeeedarchiver на Nsarray имеет большой размер накладных расходов

StackOverflow https://stackoverflow.com/questions/2778120

Вопрос

Я использую Nskeeedarchiver в Mac OS X программе, которая генерирует данные для приложения для iPhone. Я обнаружил, что по умолчанию, в результате архивы намного больше, чем я ожидал. Пример:

NSMutableArray * ar = [NSMutableArray arrayWithCapacity:10];

for (int i = 0; i < 100000; i++) {
    NSString * s = [NSString stringWithFormat:@"item%06d", i];
    [ar addObject:s];
}
[NSKeyedArchiver archiveRootObject:ar toFile: @"NSKeyedArchiver.test"];

Этот магазин 10 * 100000 = 1 м байтов полезных данных, но размер полученного файла - почти три мегабайта. Накладные расходы, кажется, растут с количеством предметов в массиве. В этом случае для 1000 предметов файл был около 22K.

«Файл» сообщает, что это «списка двоичного свойства Apple» (не формат XML).

Есть ли простой способ предотвратить этот огромный накладной расходы? Я хотел использовать NskeeedArchiver для простоты, который он обеспечивает. Я могу писать данные в свой собственный, нечебный, двоичный формат, но это не очень элегантно. Кроме того, агрегируя данные в большие куски и кормление их к NskeyEdarkiver должны работать, но опять же, что вроде бьет точку использования простой и простой и готов к использованию архиватора. Я упускаю какой-то метод вызова или образец использования, который уменьшит этот накладной расход?

Это было полезно?

Решение

Я подал ошибку, чтобы отследить это.

Кроме того, NskeyEdarchiver предназначен для архивирования объектных сетей. Как, если объект появляется дважды на графике, на Unarchiving вы все еще найдете это так. Вы, вероятно, видим накладные расходы за такого рода единокоров.

Для иерархических структурированных данных в отличие от произвольных объектных сетей, попробуйте NSPropertyLISERization. Я вижу 1,8 МБ для двоичного фильтра.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top