Pengontrol objek, mode Entitas: pengambilan lambat di Mavericks

Dibutuhkan 5 detik untuk memuat 8425 item di iMac terakhir.

masukkan deskripsi gambar di sini

Saya tidak tahu apa lagi yang ditambahkan untuk memberi Anda info lebih lanjut. Saya sedang memuat item untuk daftar drop-down NSComboBox.

Saya sudah mengujinya pada Snow Leopard dan Mountain Lion dan berfungsi dengan baik. Dicoba di beberapa mesin, ini berfungsi dengan baik di semua osx kecuali Mavericks. File build dan database yang sama.


person aneuryzm    schedule 14.03.2014    source sumber


Jawaban (1)


Dugaan saya adalah NSComboBox memuat semua item satu per satu dan CoreData harus melakukan perjalanan bolak-balik ke disk setiap kali. Anda harus memeriksa situasi ini dengan Instrumen untuk mengetahui dengan pasti apa yang terjadi.

Coba ambil terlebih dahulu semua item sebelum menampilkannya. Anda dapat menggunakan properti -[NSFetchRequest returnsObjectsAsFaults:] yang disetel ke NO selama pengambilan tersebut.

Berikut cuplikan dari proyek saya yang melakukan prefetching:

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
Di Instrumen saya dapat melihat bahwa ada durasi pengambilan yang tinggi untuk entitas tertentu. Info berguna apa lagi yang dapat saya peroleh darinya? Saya menggunakan instrumen CoreData Fetches. Anda menyarankan untuk mengatur properti secara terprogram? Lalu saya tidak bisa hanya mengandalkan pengikatan pembuat antarmuka? - person aneuryzm; 17.03.2014
comment
Ngomong-ngomong, saya juga mencoba menyetel properti Gunakan pengambilan yang lambat, tetapi tidak berhasil. - person aneuryzm; 17.03.2014
comment
Saya kira Anda tidak perlu menghilangkan binding, tetapi Anda perlu melakukan prefetching sebelum NSComboBox mencoba memuat data melalui binding. - person pointum; 17.03.2014
comment
Saya baru tahu, bahwa pengambilan di Mavericks lambat. Saya telah menjalankan aplikasinya di Snow Leopard dan Mountain Lion dan berfungsi dengan baik. - person aneuryzm; 17.03.2014
comment
Ngomong-ngomong, item pasti diambil sebelum NSComboBox dibuka. Mereka sebenarnya memperlambat seluruh layar setelah dibuka. - person aneuryzm; 18.03.2014