Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Fontos
A Windows 10 1703-es (alkotói frissítés) verziójától kezdve az x:DeferLoadStrategy az x:Load attribútum helyébe kerül. A x:Load="False" használata egyenértékű a x:DeferLoadStrategy="Lazy"-hez, de szükség esetén lehetővé teszi a felhasználói felület eldobását. További információt az x:Load attribútumban talál.
Az x:DeferLoadStrategy="Lazy" használatával optimalizálhatja az XAML-alkalmazás indítási vagy falétrehozási teljesítményét. Az x:DeferLoadStrategy="Lazy" használata esetén egy elem és gyermekeinek létrehozása késik, ami csökkenti az indítási időt és a memóriaköltségeket. Ez hasznos a ritkán vagy feltételesen megjelenített elemek költségeinek csökkentéséhez. Az elem akkor lesz megvalósítva, ha kódból vagy VisualStateManagerből hivatkoznak rá.
Az XAML-keretrendszer késleltetett elemeinek nyomon követése azonban körülbelül 600 bájtot ad hozzá az érintett elemek memóriahasználatához. Minél nagyobb az elhalasztott elemfa, annál több indítási időt takarít meg, de nagyobb memóriaigény mellett. Ezért ezt az attribútumot túl lehet használni, ami a teljesítmény csökkenéséhez vezet.
XAML-attribútumok használata
<object x:DeferLoadStrategy="Lazy" .../>
Megjegyzések
Az x:DeferLoadStrategy használatára vonatkozó korlátozások a következők:
- Meg kell adnia az elem x:nevét , mivel később meg kell találnia az elemet.
- Csak a UIElementből vagy a FlyoutBase-ből származó típusok halaszthatók el.
- Nem halaszthatja el a gyökérelemeket egy lapon, egy UserControlban vagy egy DataTemplate-ben.
- A ResourceDictionary elemeit nem késleltetheti.
- A XamlReader.Load használatával betöltött laza XAML nem késleltethető.
- A szülőelem áthelyezése törli a nem megvalósult elemeket.
A késleltetett elemek többféleképpen is megvalósíthatók:
- Hívja meg a FindName elemet az elemen definiált névvel.
- Hívja meg a GetTemplateChild metódust az elemen definiált névvel.
- VisualState-ban használjon setter vagy storyboard animációt, amely a késleltetett elemet célozza meg.
- A késleltetett elem megcélzása bármely storyboardban.
- Használjon olyan kötést, amely a késleltetett elemet célozza.
MEGJEGYZÉS: Miután egy elem példányosítása elindult, a felhasználói felületi szálon jön létre, így a felhasználói felület akadozik, ha túl sok jön létre egyszerre.
Ha a korábban felsorolt módok bármelyikében halasztott elemet hoz létre, számos dolog történik:
- Az elem betöltött eseménye aktiválódik.
- A rendszer kiértékeli az elem kötéseit.
- Ha regisztrált arra, hogy a késleltetett elemet tartalmazó tulajdonságon tulajdonságmódosítási értesítéseket kapjon, az értesítés megjelenik.
Halasztott elemeket ágyazhat be, de ezeket a legkülsőbb elemtől kifelé haladva kell létrehozni. Ha egy gyermekelemet a szülő megvalósítása előtt próbál megvalósítani, kivétel keletkezik.
Általában azt javasoljuk, hogy halasztsa el azokat az elemeket, amelyek nem láthatók az első keretben. A késleltetni kívánt jelöltek megkereséséhez jó útmutató az összecsukott láthatósággal létrehozott elemek keresése. Emellett a felhasználói interakció által aktivált felhasználói felület jó hely a késleltethető elemek keresésére.
Ügyeljen arra, hogy legyen óvatos az elemek késleltetésével a ListView-ban, mivel növeli az indítási időt, de attól függően, hogy mit hoz létre, csökkentheti a pásztázási teljesítményt is. Ha növelni szeretné a pásztázó teljesítményt, tekintse meg a {x:Bind} jelölőbővítményt és az x:Phase attribútum dokumentációját.
Ha az x:Phase attribútumot az x:DeferLoadStrategy függvénysel együtt használják, akkor egy elem vagy elemfa megvalósításakor a kötések az aktuális fázisra és az aktuális fázisra is érvényesek lesznek. Az x:Phase paraméterhez megadott fázis nem befolyásolja vagy szabályozza az elem halasztását. Amikor egy listaelemet újrafeldolgoznak a pásztázás részeként, a felismert elemek ugyanúgy viselkednek, mint a többi aktív elem, és a lefordított kötések ({x:Bind} kötések) feldolgozása ugyanazokkal a szabályokkal történik, beleértve a fokozatos műveletet is.
Általános útmutató az alkalmazás teljesítményének mérése előtt és után, hogy biztosan megkapja-e a kívánt teljesítményt.
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