Bagikan melalui


Mengoptimalkan performa: Kontrol

Windows Presentation Foundation (WPF) mencakup banyak komponen antarmuka pengguna (UI) umum yang digunakan di sebagian besar aplikasi Windows. Topik ini berisi teknik untuk meningkatkan performa UI Anda.

Menampilkan himpunan data besar

Kontrol WPF seperti ListView dan ComboBox digunakan untuk menampilkan daftar item dalam aplikasi. Jika daftar yang ditampilkan besar, performa aplikasi dapat terpengaruh. Ini karena sistem tata letak standar membuat kontainer tata letak untuk setiap item yang terkait dengan kontrol daftar, dan menghitung ukuran dan posisi tata letaknya. Biasanya, Anda tidak perlu menampilkan semua item secara bersamaan; sebagai gantinya, Anda menampilkan subset, dan pengguna menggulir daftar. Dalam hal ini, masuk akal untuk menggunakan virtualisasi UI, yang berarti pembuatan kontainer item dan komputasi tata letak terkait untuk item ditangguhkan hingga item terlihat.

Virtualisasi UI adalah aspek penting dari kontrol daftar. Virtualisasi UI tidak boleh dikacaukan dengan virtualisasi data. Virtualisasi UI hanya menyimpan item yang terlihat dalam memori tetapi dalam skenario pengikatan data menyimpan seluruh struktur data dalam memori. Sebaliknya, virtualisasi data hanya menyimpan item data yang terlihat di layar dalam memori.

Secara default, virtualisasi UI diaktifkan untuk ListView kontrol dan ListBox saat item daftar mereka terikat ke data. TreeView virtualisasi dapat diaktifkan dengan mengatur VirtualizingStackPanel.IsVirtualizing properti terlampir ke true. Jika Anda ingin mengaktifkan virtualisasi UI untuk kontrol kustom yang berasal dari ItemsControl atau kontrol item yang ada yang menggunakan StackPanel kelas , seperti ComboBox, Anda dapat mengatur ItemsPanel ke dan mengatur IsVirtualizing ke VirtualizingStackPaneltrue. Sayangnya, Anda dapat menonaktifkan virtualisasi UI untuk kontrol ini tanpa menyadarinya. Berikut ini adalah daftar kondisi yang menonaktifkan virtualisasi UI.

Pertimbangan penting saat Anda memvirtualisasi kontainer item adalah apakah Anda memiliki informasi status tambahan yang terkait dengan kontainer item yang termasuk dalam item. Dalam hal ini, Anda harus menyimpan status tambahan. Misalnya, Anda mungkin memiliki item yang terkandung dalam Expander kontrol dan IsExpanded status terikat ke kontainer item, dan bukan ke item itu sendiri. Saat kontainer digunakan kembali untuk item baru, nilai IsExpanded saat ini digunakan untuk item baru. Selain itu, item lama kehilangan nilai yang benar IsExpanded .

Saat ini, tidak ada kontrol WPF yang menawarkan dukungan bawaan untuk virtualisasi data.

Daur ulang kontainer

Pengoptimalan ke virtualisasi UI yang ditambahkan dalam .NET Framework 3.5 SP1 untuk kontrol yang mewarisi adalah ItemsControldaur ulang kontainer, yang juga dapat meningkatkan performa pengguliran. ItemsControl Ketika yang menggunakan virtualisasi UI diisi, ia membuat kontainer item untuk setiap item yang digulir ke tampilan dan menghancurkan kontainer item untuk setiap item yang digulir keluar dari tampilan. Daur ulang kontainer memungkinkan kontrol untuk menggunakan kembali kontainer item yang ada untuk item data yang berbeda, sehingga kontainer item tidak terus-menerus dibuat dan dihancurkan saat pengguna menggulir ItemsControl. Anda dapat memilih untuk mengaktifkan daur ulang item dengan mengatur VirtualizationMode properti terlampir ke Recycling.

Apa pun ItemsControl yang mendukung virtualisasi dapat menggunakan daur ulang kontainer. Untuk contoh cara mengaktifkan daur ulang kontainer pada ListBox, lihat Meningkatkan Performa Pengguliran ListBox.

Mendukung virtualisasi dua arah

VirtualizingStackPanel menawarkan dukungan bawaan untuk virtualisasi UI dalam satu arah, baik secara horizontal maupun vertikal. Jika Anda ingin menggunakan virtualisasi dua arah untuk kontrol, Anda harus menerapkan panel kustom yang memperluas VirtualizingStackPanel kelas. Kelas mengekspos VirtualizingStackPanel metode virtual seperti OnViewportSizeChanged, , LineUpPageUp, dan MouseWheelUp. Metode virtual ini memungkinkan Anda mendeteksi perubahan di bagian daftar yang terlihat dan menanganinya dengan sesuai.

Mengoptimalkan templat

Pohon visual berisi semua elemen visual dalam aplikasi. Selain objek yang dibuat langsung, objek juga berisi objek karena ekspansi templat. Misalnya, saat membuat Button, Anda juga mendapatkan ClassicBorderDecorator dan ContentPresenter objek di pohon visual. Jika Anda belum mengoptimalkan templat kontrol, Anda mungkin membuat banyak objek ekstra yang tidak perlu di pohon visual. Untuk informasi selengkapnya tentang pohon visual, lihat Gambaran Umum Penyajian Grafis WPF.

Pengguliran yang ditangguhkan

Secara default, saat pengguna menyeret ibu jari pada bilah gulir, tampilan konten terus diperbarui. Jika pengguliran lambat di kontrol Anda, pertimbangkan untuk menggunakan pengguliran yang ditangguhkan. Dalam pengguliran yang ditangguhkan, konten hanya diperbarui saat pengguna merilis jempol.

Untuk menerapkan pengguliran yang ditangguhkan, atur properti ke IsDeferredScrollingEnabledtrue. IsDeferredScrollingEnabled adalah properti terlampir dan dapat diatur pada ScrollViewer dan kontrol apa pun yang memiliki ScrollViewer dalam templat kontrolnya.

Kontrol yang mengimplementasikan fitur performa

Tabel berikut mencantumkan kontrol umum untuk menampilkan data dan dukungan fitur performanya. Lihat bagian sebelumnya untuk informasi tentang cara mengaktifkan fitur-fitur ini.

Kontrol Virtualization Daur ulang kontainer Pengguliran yang ditangguhkan
ComboBox Dapat diaktifkan Dapat diaktifkan Dapat diaktifkan
ContextMenu Dapat diaktifkan Dapat diaktifkan Dapat diaktifkan
DocumentViewer Tidak tersedia Tidak tersedia Dapat diaktifkan
ListBox Default Dapat diaktifkan Dapat diaktifkan
ListView Default Dapat diaktifkan Dapat diaktifkan
TreeView Dapat diaktifkan Dapat diaktifkan Dapat diaktifkan
ToolBar Tidak tersedia Tidak tersedia Dapat diaktifkan

Catatan

Untuk contoh cara mengaktifkan virtualisasi dan daur ulang kontainer pada TreeView, lihat Meningkatkan Performa TreeView.

Baca juga