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.
Penting
Mulai dari Windows 10, versi 1703 (Pembaruan Kreator), x:DeferLoadStrategy digantikan oleh atribut x:Load. Penggunaan x:Load="False" setara dengan x:DeferLoadStrategy="Lazy", tetapi menyediakan kemampuan untuk membongkar UI jika diperlukan. Lihat atribut x:Load untuk informasi selengkapnya.
Anda dapat menggunakan x:DeferLoadStrategy="Lazy" untuk mengoptimalkan performa startup atau pembuatan pohon aplikasi XAML Anda. Saat Anda menggunakan x:DeferLoadStrategy="Lazy", pembuatan elemen dan turunannya tertunda, yang mengurangi waktu startup dan biaya memori. Ini berguna untuk mengurangi biaya elemen yang jarang ditampilkan atau kondisional. Elemen akan direalisasikan ketika dirujuk dari kode atau VisualStateManager.
Namun, pelacakan elemen yang ditangguhkan oleh kerangka kerja XAML menambahkan sekitar 600 byte ke penggunaan memori untuk setiap elemen yang terpengaruh. Semakin besar pohon elemen yang Anda tangguhkan, semakin banyak waktu startup yang akan Anda hemat, tetapi dengan konsekuensi penggunaan memori yang lebih besar. Oleh karena itu, dimungkinkan untuk menggunakan atribut ini secara berlebihan sejauh performa Anda menurun.
Penggunaan atribut XAML
<object x:DeferLoadStrategy="Lazy" .../>
Komentar
Batasan untuk menggunakan x:DeferLoadStrategy adalah:
- Anda harus menentukan x:Name untuk elemen , karena perlu ada cara untuk menemukan elemen nanti.
- Anda hanya dapat menunda jenis yang berasal dari UIElement atau FlyoutBase.
- Anda tidak dapat menunda elemen root di Halaman, UserControl, atau DataTemplate.
- Anda tidak dapat menugasi elemen dalam ResourceDictionary.
- Anda tidak dapat menunda XAML yang tidak terikat yang dimuat dengan XamlReader.Load.
- Memindahkan elemen induk akan menghapus elemen apa pun yang belum direalisasikan.
Ada beberapa cara berbeda untuk mewujudkan elemen yang ditangguhkan:
- Panggil FindName dengan nama yang Anda tentukan pada elemen .
- Panggil GetTemplateChild dengan nama yang Anda tentukan pada elemen .
- Di VisualState, gunakan animasi Setter atau Storyboard yang menargetkan elemen yang ditangguhkan.
- Targetkan elemen yang ditangguhkan di Storyboard apa pun.
- Gunakan pengikatan yang menargetkan elemen yang ditangguhkan.
CATATAN: Setelah instansiasi elemen dimulai, elemen dibuat pada utas UI, sehingga dapat menyebabkan UI terganggu jika terlalu banyak yang dibuat secara bersamaan.
Setelah elemen yang ditangguhkan dibuat dengan salah satu cara yang tercantum sebelumnya, beberapa hal terjadi:
- Peristiwa Yang dimuat pada elemen dinaikkan.
- Setiap pengikatan pada elemen dievaluasi.
- Jika Anda telah mendaftar untuk menerima pemberitahuan perubahan properti pada properti yang berisi elemen yang ditangguhkan, pemberitahuan akan dinaikkan.
Anda dapat menumpuk elemen yang ditangguhkan, namun elemen tersebut harus diwujudkan dari elemen terluar ke dalam. Jika Anda mencoba mewujudkan elemen turunan sebelum induk direalisasikan, pengecualian akan dimunculkan.
Biasanya, kami sarankan Anda menunda elemen yang tidak dapat dilihat di frame pertama. Pedoman yang baik untuk menemukan kandidat yang akan ditangguhkan adalah mencari elemen yang sedang dibuat dengan Visibilitas yang diciutkan. Selain itu, UI yang dipicu oleh interaksi pengguna adalah tempat yang baik untuk mencari elemen yang dapat Anda tangguhkan.
Waspadalah terhadap elemen yang ditangguhkan dalam ListView, karena akan mengurangi waktu startup Anda, tetapi juga dapat mengurangi performa panning Anda tergantung pada apa yang Anda buat. Jika Anda ingin meningkatkan performa panning, lihat dokumentasi ekstensi markup {x:Bind} dan atribut x:Phase .
Jika atribut x:Phase digunakan bersama dengan x:DeferLoadStrategy , ketika elemen atau pohon elemen direalisasikan, pengikatan diterapkan hingga dan termasuk fase saat ini. Fase yang ditentukan untuk x:Phase tidak memengaruhi atau mengontrol penundaan elemen. Ketika item daftar didaur ulang sebagai bagian dari panning, elemen yang diwujudkan berulah dengan cara yang sama seperti elemen aktif lainnya, dan pengikatan yang dikompilasi ({x:Bind} pengikatan) diproses menggunakan aturan yang sama, termasuk phasing.
Pedoman umumnya adalah mengukur performa aplikasi sebelum dan sesudahnya untuk memastikan Anda mendapatkan performa yang Diinginkan.
Example
<Grid x:Name="DeferredGrid" x:DeferLoadStrategy="Lazy">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Rectangle Height="100" Width="100" Fill="#F65314" Margin="0,0,4,4" />
<Rectangle Height="100" Width="100" Fill="#7CBB00" Grid.Column="1" Margin="4,0,0,4" />
<Rectangle Height="100" Width="100" Fill="#00A1F1" Grid.Row="1" Margin="0,4,4,0" />
<Rectangle Height="100" Width="100" Fill="#FFBB00" Grid.Row="1" Grid.Column="1" Margin="4,4,0,0" />
</Grid>
<Button x:Name="RealizeElements" Content="Realize Elements" Click="RealizeElements_Click"/>
private void RealizeElements_Click(object sender, RoutedEventArgs e)
{
// This will realize the deferred grid.
this.FindName("DeferredGrid");
}
Windows developer