Ошибка mmap в приложении ipad с многопоточностью и основными данными - PullRequest
0 голосов
/ 28 июля 2011

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

1 Ответ

1 голос
/ 28 июля 2011

Мое приложение запускает 12 потоков в то время, когда это происходит. Возможно ли это из-за утечки памяти?

То, что вы запускаете потоки, не имеет значения (за исключением того, что это не •). И, да, это, скорее всего, из-за утечки памяти или, по крайней мере, злоупотребления памятью.

Вам не понадобится очень много 2 097 152 байта для того, чтобы исчерпать всю доступную память. И это не может быть утечки; если у вас просто есть длительный процесс, который накапливает много памяти перед очисткой в ​​конце, это может вызвать это поведение.

Не зная больше, очень трудно сказать, что происходит. Конечно, было бы интересно установить точку останова в соответствии с инструкциями и посмотреть, где происходит неудачное размещение.

<Ч />

• 12 потоков - это очень много в приложении для iPhone. Существует только одно ядро ​​(2 на iPad 2), пропускная способность ввода / вывода памяти не так велика, и, таким образом, 12 потоков, конкурирующих за ресурсы, с большой вероятностью будут работать намного медленнее, чем пара потоков ,

Кроме того, вы вообще не должны создавать потоки (за исключением редких обстоятельств). Вместо этого вы должны использовать очереди (GCD или NSOperationQueue), поскольку они намного лучше интегрированы с ОС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...