2017-02-21 25 views
0

Я вставляю записи в свои основные объекты данных. Как записи, увеличивающие время, затрачиваемое на вставку записей.Сколько времени потребуется, чтобы вставить запись в coredata?

У меня есть логин в течение 6 секунд, чтобы вставить 100 записей (для цикла, чтобы вставить один за другим), когда мой объект имеет около 10000 записей.

Что я делаю, проверяя при вставке, что если эта запись уже существует, я обновляю эту запись, иначе вставляя.

Каждая итерация цикла содержит информацию из 14 реляционных таблиц.

Так это все в порядке? или 6 секунд намного больше?

+0

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

ответ

1

Нет, он слишком длинный. Ты делаешь это неправильно. Но есть лучший способ! Сделайте одну выборку выборки для всех записей, которые вы хотите вставить первым. Затем сохраните их в словаре с помощью ключа поиска, который вы убедитесь, что он уникален (вероятно, это идентификатор какого-то типа). Затем вместо того, чтобы делать выборку для каждой вставки, вы просто проверяете словарь. Если у вас много отношений, и в ваших методах создания и/или обновления выполняются выборки (чтобы обеспечить уникальность), количество выборок может быстро выйти из-под контроля. Вы можете решить эту проблему, пройдя по поисковому словарю, чтобы больше не было сделано. Конечно, вы должны быть осторожны, чтобы не передавать этот словарь в поток, который не связан с managedObjectContext, который был сделан извлечения.

+0

hmm, Да, отладочный код для определения, какая часть кода занимает время –

+0

2017-02-20 19: 10: 27.254 CFBundleDisplayName [41438: 1981146] Вставка записей 2017-02-20 19: 10: 34.807 CFBundleDisplayName [41438: 1981146] DB Обновлено –