Penggambaran ulang TableViewer secara lambat saat mengubah objek input

Dalam proyek saya, saya memiliki TableViewer yang menampilkan sekitar 1k baris data dari database. ContentProvider adalah ArrayContentProvider.

Ketika saya mengubah input Daftar (setInput() pada objek TableViewer) ke yang lain dengan jumlah data yang sama, semuanya baik-baik saja. Namun ketika saya ingin mengupdatenya dengan List<T> dengan ukuran berbeda dari sebelumnya, aplikasi terhenti sekitar 10x waktu perubahan dengan jumlah data yang sama.

Daftar pertama berukuran 1k, dan daftar kedua berukuran sekitar 960. Eksekusi langsung terhenti pada metode setInput().

Adakah yang tahu mengapa ini terjadi?


person Zayl    schedule 17.10.2012    source sumber
comment
TableViewer melakukan banyak hal dalam metode setInput; mendapatkan elemen sebagai array, mengurutkan, memfilter, membandingkan dengan item daftar lama, dll... Saya mungkin akan memeriksa metode toArray pada implementasi daftar apa pun yang Anda miliki terlebih dahulu karena akan mudah untuk dijadikan tolok ukur/hilangkan.   -  person Nick Wilson    schedule 17.10.2012


Jawaban (1)


Saya pikir alasannya adalah ketika Anda menetapkan Daftar dengan ukuran berbeda, seluruh TableItems asli dibuat ulang. Jadi untuk mempercepat tabel Anda sebaiknya menggunakan tabel gaya SWT.Virtual. Dengan tabel virtual, hanya item tabel yang ditampilkan yang dibuat. Yang lainnya dibuat saat Anda menggulir.

Lihat http://git.eclipse.org/c/platform/eclipse.platform.ui.git/tree/examples/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet029VirtualTableViewer.java sebagai contoh.

person Ralf M Petter    schedule 06.11.2012
comment
Terima kasih telah memutar ulang. Sayangnya saya sudah menggunakan gaya ini di TableViewer dan itu tidak membantu. Yang menarik, saat diubah ke ukuran yang lebih kecil, tabel dimuat dengan benar, tetapi ketika saya ingin memuat daftar yang lebih besar, maka tabel tersebut terhenti. - person Zayl; 06.11.2012
comment
Anda harus menggunakan profiler untuk menganalisis masalahnya. Profiler akan menunjukkan kepada Anda apa yang dilakukan kode Anda saat dibekukan. - person Ralf M Petter; 07.11.2012