Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
Windows 10, sürüm 1703 'den (Creators Update) başlayarak x:DeferLoadStrategy , x:Load özniteliğiyle değiştirilir.
x:Load="False" kullanımı, x:DeferLoadStrategy="Lazy" ile eşdeğerdir, ancak gerekirse kullanıcı arabirimini kaldırma olanağı sağlar. Daha fazla bilgi için x:Load özniteliğine bakın.
XAML uygulamanızın başlangıç veya ağaç oluşturma performansını iyileştirmek için x:DeferLoadStrategy="Lazy" kullanabilirsiniz. x:DeferLoadStrategy="Lazy" kullandığınızda, bir öğenin ve alt öğelerinin oluşturulması gecikir ve bu da başlangıç süresini ve bellek maliyetlerini azaltır. Bu, seyrek veya koşullu olarak gösterilen öğelerin maliyetlerini azaltmak için yararlıdır. Bu öğe, koddan veya VisualStateManager'dan başvurulduğunda etkinleştirilir.
Ancak, XAML çerçevesi tarafından ertelenen öğelerin izlenmesi, etkilenen her öğe için bellek kullanımına yaklaşık 600 bayt ekler. Ertelediğiniz öğe ağacı ne kadar büyükse, daha fazla başlangıç süresinden tasarruf edersiniz, ancak bellek ayak izi daha yüksek olur. Bu nedenle, bu özniteliği performansınızın düştüğü ölçüde aşırı kullanmak mümkündür.
XAML öznitelik kullanımı
<object x:DeferLoadStrategy="Lazy" .../>
Açıklamalar
x:DeferLoadStrategy kullanma kısıtlamaları şunlardır:
- Öğeyi daha sonra bulmanın bir yolu olması gerektiğinden, öğe için bir x:Name tanımlamanız gerekir.
- Yalnızca UIElement veya FlyoutBase'den türetilen türleri erteleyebilirsiniz.
- Sayfa, UserControl veya DataTemplate içindeki kök öğeleri erteleyemezsiniz.
- ResourceDictionary içindeki öğeleri erteleyemezsiniz.
- XamlReader.Load ile yüklenen gevşek XAML'yi erteleyemezsiniz.
- Bir üst öğenin taşınması, gerçekleştirilmemiş tüm öğeleri temizler.
Ertelenen öğeleri gerçekleştirmenin birkaç farklı yolu vardır:
- Öğesinde tanımladığınız adla FindName öğesini çağırın.
- Öğesinde tanımladığınız adla GetTemplateChild öğesini çağırın.
- VisualState'te, ertelenen öğeyi hedefleyen bir Setter veya Görsel Taslak animasyonu kullanın.
- Herhangi bir Görsel Taslakta ertelenen öğeyi hedefle.
- Ertelenen öğeyi hedefleyen bir bağlama kullanın.
Bir öğenin örneklemesi başlatıldıktan sonra, kullanıcı arabirimi iş parçacığında oluşturulduğu için, aynı anda çok fazla öğe oluşturulursa kullanıcı arabiriminde takılmalar yaşanabilir.
Daha önce listelenen yollardan herhangi birinde ertelenen bir öğe oluşturulduktan sonra birkaç şey gerçekleşir:
- öğesinde Loaded olayı tetiklenir.
- öğesindeki tüm bağlamalar değerlendirilir.
- Ertelenen öğeleri içeren özellikte özellik değişikliği bildirimleri almak için kaydoldıysanız, bildirim oluşturulur.
Ertelenen öğeleri iç içe yerleştirebilirsiniz, ancak bunların en dış öğeden içeri doğru gerçekleştirilmesi gerekir. Üst öğe gerçekleştirilmeden önce bir alt öğe gerçekleştirmeye çalışırsanız, bir istisna oluşturulur.
Genellikle, ilk karede görüntülenemeyen öğeleri ertelemenizi öneririz. Ertelenecek adayları bulmak için iyi bir kılavuz, daraltılmış Görünürlük kullanılarak oluşturulan öğeleri aramaktır. Ayrıca, kullanıcı etkileşimi tarafından tetiklenen kullanıcı arabirimi, erteleyebileceğiniz öğeleri aramak için iyi bir yerdir.
Bir ListView'daki öğeleri ertelemekten kaçının, çünkü bu başlangıç performansınızı düşürebileceği gibi, oluşturduğunuz öğelere bağlı olarak kaydırma performansınızı da düşürebilir. Kaydırma performansını artırmak istiyorsanız {x:Bind} işaretleme uzantısına ve x:Phase özniteliği belgelerine bakın.
x:Phase özniteliğix:DeferLoadStrategy ile birlikte kullanılıyorsa, bir öğe veya öğe ağacı gerçekleştirildiğinde, bağlamalar geçerli aşamaya kadar uygulanır ve bu aşamayı da içerir. x:Phase için belirtilen aşama öğenin ertelemesini etkilemez veya denetlemez. Bir liste öğesi kaydırma işleminin bir parçası olarak geri dönüştürüldüyse, gerçekleştirilen öğeler diğer etkin öğelerle aynı şekilde davranır ve derlenmiş bağlamalar ({x:Bind} bağlamaları) phasing de dahil olmak üzere aynı kurallar kullanılarak işlenir.
Genel bir kılavuz, istediğiniz performansı elde ettiğinizden emin olmak için uygulamanızın önce ve sonra performansını ölçmektir.
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