Синтаксический анализатор CSV с низким объемом потребляемой памяти для iPhone

После тестирования моего приложения с Инструментами я понял, что текущий синтаксический анализатор CSV, который я использую, имеет огромный объем потребляемой памяти. У кого-либо есть рекомендация для одной с низким объемом потребляемой памяти?

7
задан catlan 13 June 2010 в 05:18
поделиться

3 ответа

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

Быстрым решением будет создание NSAutoreleasePool в конце цикла, и слив его в конце:

while ( ![scanner isAtEnd] ) {        
    NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];

... куча кода...

    [innerPool drain];
}

Это уничтожит временные объекты, поэтому объем памяти будет равен размеру данных, плюс объект для каждой строки в файле (примерно 8 байт * строки * столбцы)

5
ответ дан 7 December 2019 в 05:18
поделиться

Можно попробовать и другие парсеры CSV:

Вы можете поэкспериментировать, чтобы увидеть, не снижает ли какой-либо из них накладные расходы на память.

Ни один из них не поддерживает синтаксический анализ "на основе событий". При синтаксическом анализе на основе событий вы никогда не загружаете в память весь исходный файл, а достаточно для чтения текущей строки (вы также можете сделать это в процессе загрузки). Вы должны обрабатывать каждую строку по мере ее чтения и убедиться, что все данные из источника освобождены между строками.

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

3
ответ дан 7 December 2019 в 05:18
поделиться

Это не анализатор CSV, но моя структура Cocoa ParseKit с открытым исходным кодом имеет мощный / удобный / настраиваемый строковый токенизатор, который может быть полезен для CSV или других типов синтаксического анализа / токенизации.

Фреймворк:

http://parsekit.com

Некоторая документация по использованию:

http://parsekit.com/tokenization.html

Класс PKTokenizer:

http: / /github.com/itod/parsekit/blob/master/include/ParseKit/PKTokenizer.h http://github.com/itod/parsekit/blob/master/src/PKTokenizer.m

0
ответ дан 7 December 2019 в 05:18
поделиться