Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 sampai 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 kontrol ListView dan ListBox saat item daftar mereka terikat ke data. Virtualisasi TreeView dapat diaktifkan dengan menetapkan properti yang terhubung VirtualizingStackPanel.IsVirtualizing ke true
. Jika Anda ingin mengaktifkan virtualisasi UI untuk kontrol kustom yang berasal dari ItemsControl atau kontrol item yang ada yang menggunakan kelas StackPanel, seperti ComboBox, Anda dapat mengatur ItemsPanel ke VirtualizingStackPanel dan mengatur IsVirtualizing ke true
. Sayangnya, Anda dapat menonaktifkan virtualisasi UI untuk kontrol ini tanpa menyadarinya. Berikut ini adalah daftar kondisi yang menonaktifkan virtualisasi UI.
Kontainer item ditambahkan langsung ke ItemsControl. Misalnya, jika aplikasi secara eksplisit menambahkan objek ListBoxItem ke ListBox, ListBox tidak memvirtualisasi objek ListBoxItem.
Kontainer item dalam ItemsControl memiliki jenis yang berbeda. Misalnya, Menu yang menggunakan objek Separator tidak dapat menerapkan daur ulang item karena Menu berisi objek jenis Separator dan MenuItem.
Mengatur CanContentScroll menjadi
false
.Mengatur IsVirtualizing menjadi
false
.
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 kontrol Expander dan status IsExpanded 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 IsExpanded yang benar.
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 dari ItemsControldaur ulang kontainer, yang juga dapat meningkatkan performa pengguliran. Ketika ItemsControl yang menggunakan virtualisasi UI diisi, itu membuat kontainer item untuk setiap item yang menggulir ke tampilan dan menghancurkan kontainer item untuk setiap item yang menggulir ke luar 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 properti terlampir VirtualizationMode ke Recycling.
Setiap ItemsControl yang mendukung virtualisasi dapat menggunakan daur ulang kontainer. Untuk melihat contoh cara mengaktifkan daur ulang kontainer pada ListBox, silakan lihat tentang Meningkatkan Performa Pengguliran sebuah 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 kelas VirtualizingStackPanel. Kelas VirtualizingStackPanel mengekspos metode virtual seperti OnViewportSizeChanged, LineUp, PageUp, 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 secara langsung, ini juga mencakup objek yang berasal dari pengembangan templat. Misalnya, saat membuat Button, Anda juga mendapatkan objek ClassicBorderDecorator dan ContentPresenter 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 Grafik WPF .
Pengguliran tertunda
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 tertunda, konten hanya diperbarui saat pengguna melepaskan jempol.
Untuk menerapkan pengguliran yang ditangguhkan, atur properti IsDeferredScrollingEnabled ke true
.
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.
Pengendalian | Virtualisasi | Daur ulang kontainer | Pengguliran tertunda |
---|---|---|---|
ComboBox | Dapat diaktifkan | Dapat diaktifkan | Dapat diaktifkan |
ContextMenu | Dapat diaktifkan | Dapat diaktifkan | Dapat diaktifkan |
DocumentViewer | Tidak tersedia | Tidak tersedia | Dapat diaktifkan |
ListBox | Bawaan | Dapat diaktifkan | Dapat diaktifkan |
ListView | Bawaan | Dapat diaktifkan | Dapat diaktifkan |
TreeView | Dapat diaktifkan | Dapat diaktifkan | Dapat diaktifkan |
ToolBar | Tidak tersedia | Tidak tersedia | Dapat diaktifkan |
Nota
Untuk contoh cara mengaktifkan virtualisasi dan pengelolaan ulang kontainer pada TreeView, lihat Cara Meningkatkan Performa TreeView.
Lihat juga
.NET Desktop feedback