Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Belangrijk
Vanaf Windows 10, versie 1703 (Creators Update), wordt x:DeferLoadStrategy vervangen door het kenmerk x:Load. Het gebruik x:Load="False" is gelijk aan x:DeferLoadStrategy="Lazy", maar biedt de mogelijkheid om de gebruikersinterface te verwijderen, indien nodig. Zie het kenmerk x:Load voor meer informatie.
U kunt x:DeferLoadStrategy="Lazy" gebruiken om de opstart- of boomstructuurprestaties van uw XAML-app te optimaliseren. Wanneer u x:DeferLoadStrategy="Lazy" gebruikt, wordt de aanmaak van een element en zijn onderliggende elementen uitgesteld, waardoor de opstarttijd en geheugenkosten verminderen. Dit is handig om de kosten te verlagen van elementen die niet vaak of voorwaardelijk worden weergegeven. Het element wordt gerealiseerd wanneer er vanuit code of VisualStateManager naar wordt verwezen.
Het bijhouden van uitgestelde elementen door het XAML-framework voegt echter ongeveer 600 bytes toe aan het geheugengebruik voor elk betrokken element. Hoe groter de elementenboom die u uitstelt, hoe meer opstarttijd u bespaart, maar dat gaat ten koste van een grotere geheugenvoetafdruk. Daarom is het mogelijk om dit kenmerk te veel te gebruiken voor zover uw prestaties afnemen.
XAML-kenmerkgebruik
<object x:DeferLoadStrategy="Lazy" .../>
Opmerkingen
De beperkingen voor het gebruik van x:DeferLoadStrategy zijn:
- U moet een x:Name definiëren voor het element, omdat er later een manier moet zijn om het element te vinden.
- U kunt alleen typen uitstellen die zijn afgeleid van UIElement of FlyoutBase.
- U kunt hoofdelementen in een pagina, usercontrol of een DataTemplate niet uitstellen.
- U kunt elementen in een ResourceDictionary niet uitstellen.
- U kunt losse XAML die is geladen met XamlReader.Load niet uitstellen.
- Als u een ouderelement verplaatst, worden alle elementen verwijderd die niet zijn gerealiseerd.
Er zijn verschillende manieren om de uitgestelde elementen te realiseren:
- Roep FindName aan met de naam die u hebt gedefinieerd voor het element.
- Roep GetTemplateChild aan met de naam die u voor het element hebt gedefinieerd.
- Gebruik in een VisualState een Setter - of Storyboard-animatie die is gericht op het uitgestelde element.
- Richt je op het uitgestelde element in elk Storyboard.
- Gebruik een binding die is gericht op het uitgestelde element.
OPMERKING: Zodra de instantiëring van een element is gestart, wordt het gemaakt op de UI-thread, zodat de gebruikersinterface stutters kan veroorzaken als er te veel tegelijk wordt gemaakt.
Zodra een uitgestelde element is gemaakt op een van de eerder vermelde manieren, gebeuren er verschillende dingen:
- De Loaded-gebeurtenis op het element wordt gegenereerd.
- Alle bindingen op het element worden geëvalueerd.
- Als u zich hebt geregistreerd voor het ontvangen van meldingen over eigenschappenwijzigingen voor de eigenschap met de uitgestelde elementen, wordt de melding gegenereerd.
U kunt uitgestelde elementen nesten, maar ze moeten worden gerealiseerd vanuit het meest buitenste element. Als u probeert een kind-element te realiseren voordat het ouder-element is gerealiseerd, treedt er een uitzondering op.
Normaal gesproken raden we u aan elementen uit te stellen die niet zichtbaar zijn in het eerste frame. Een goede richtlijn om kandidaten te vinden die moeten worden uitgesteld, is om te zoeken naar elementen die worden gemaakt met gecollapseerde zichtbaarheid. Ook is de gebruikersinterface die wordt geactiveerd door gebruikersinteractie een goede plek om te zoeken naar elementen die u kunt uitstellen.
Wees voorzichtig met het uitstellen van elementen in een ListView, omdat deze de opstarttijd vermindert, maar de panningprestaties kunnen ook afnemen, afhankelijk van wat u maakt. Als u de panningprestaties wilt verbeteren, raadpleegt u de markeringsextensie {x:Bind} en de documentatie over het kenmerk x:Phase .
Als het kenmerk x:Phase wordt gebruikt in combinatie met x:DeferLoadStrategy , worden de bindingen toegepast tot en met de huidige fase wanneer een element of elementstructuur wordt gerealiseerd. De fase die is opgegeven voor x:Phase heeft geen invloed op of bepaalt niet het uitstel van het element. Wanneer een lijstitem wordt gerecycled als onderdeel van panning, gedragen gerealiseerde elementen zich op dezelfde manier als andere actieve elementen en worden gecompileerde bindingen ({x:Bind} bindingen) verwerkt met behulp van dezelfde regels, waaronder fasering.
Een algemene richtlijn is om de prestaties van uw app voor en na te meten om ervoor te zorgen dat u de gewenste prestaties krijgt.
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