Контроллер объекта, режим Entity: выборка на Mavericks медленная

Загрузка 8425 элементов на последний iMac занимает 5 секунд.

введите здесь описание изображения

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

Я тестировал на Snow Leopard и Mountain Lion, и все работает нормально. Пробовал на нескольких машинах, отлично работает на всех osx кроме Mavericks. Те же файлы сборки и базы данных.


person aneuryzm    schedule 14.03.2014    source источник


Ответы (1)


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

Попробуйте выполнить предварительную выборку всех элементов перед их отображением. Вы можете использовать свойство -[NSFetchRequest returnsObjectsAsFaults:], установленное на NO во время такой выборки.

Вот фрагмент моего проекта, который выполняет предварительную выборку:

if ( ! didPrefetch)
{
    didPrefetch = YES;

    // Your fetch request that will load all items
    NSFetchRequest* fetchRequest = ... ;

    // If you need to prefetch some relationships
    fetchRequest.relationshipKeyPathsForPrefetching = @[...]; 

    // This forces objects to fault info row cache
    fetchRequest.returnsObjectsAsFaults = NO; 

    [managedObjectContext executeFetchRequest:fetchRequest error:&error];
}
person pointum    schedule 15.03.2014
comment
В инструментах я вижу, что для определенного объекта существует большая продолжительность выборки. Какую еще полезную информацию я мог бы получить от него? Я использую инструмент CoreData Fetches. Вы предлагаете задавать свойства программно? Тогда я не могу полагаться только на привязку построителя интерфейса? - person aneuryzm; 17.03.2014
comment
Кстати, я также пытался установить свойство Использовать ленивую выборку, но безуспешно. - person aneuryzm; 17.03.2014
comment
Я предполагаю, что вам не нужно избавляться от привязок, но вам нужно выполнить предварительную выборку прежде чем NSComboBox попытается загрузить данные через привязки. - person pointum; 17.03.2014
comment
Я только что узнал, что выборка на Mavericks идет медленно. Я запускал приложение на Snow Leopard и Mountain Lion, и оно работает хорошо. - person aneuryzm; 17.03.2014
comment
Кстати, элементы обязательно извлекаются до открытия NSComboBox. Они фактически замедляют весь экран после его открытия. - person aneuryzm; 18.03.2014