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.
A WPF lehetővé teszi az alkalmazáserőforrások megosztását, így egységes megjelenést vagy viselkedést támogathat a hasonló típusú elemek között. Ez a témakör néhány javaslatot tartalmaz ezen a területen, amelyek segíthetnek az alkalmazások teljesítményének javításában.
További információ az erőforrásokról: XAML-erőforrások.
Erőforrások megosztása
Ha az alkalmazás egyéni vezérlőket használ, és erőforrásokat definiál egy ResourceDictionary (vagy XAML-erőforrások csomópontja), javasoljuk, hogy vagy az erőforrásokat az Application vagy Window objektumszinten definiálja, vagy az egyéni vezérlők alapértelmezett témájában definiálja őket. Az erőforrások egyéni vezérlők ResourceDictionary való definiálása teljesítménybeli hatással van a vezérlő minden egyes példányára. Például, ha egy egyéni vezérlő erőforrás-definíciójának részeként teljesítményigényes ecsetműveletek vannak meghatározva és sok ilyen egyéni vezérlő példány van, akkor az alkalmazás munkakészlete jelentősen megnő.
A pont szemléltetéséhez vegye figyelembe az alábbiakat. Tegyük fel, hogy egy WPF-et használó kártyajátékot fejleszt. A legtöbb kártyajátékhoz 52 kártya szükséges 52 különböző arccal. Úgy dönt, hogy egyéni kártyavezérlőt implementál, és 52 kefét határoz meg (mindegyik egy kártya arcát jelöli) a kártya egyéni vezérlőjének erőforrásaiban. Az alkalmazásod fő részében kezdetben 52 példányt hoz létre a kártya egyéni vezérlőjéből. A kártya egyéni vezérlőjének minden példánya 52 Brush objektumpéldányt hoz létre, amely összesen 52 * 52 Brush objektumot biztosít az alkalmazásban. Ha az keféket a kártya egyéni vezérlőerőforrásai közül a Application vagy Window objektumszintre helyezi át, vagy az egyéni vezérlő alapértelmezett témájában definiálja őket, csökkentheti az alkalmazás munkakészletét, mivel most már 52 kefét oszt meg a kártyavezérlő 52 példánya között.
Ecset megosztása másolás nélkül
Ha több elem is ugyanazt a Brush objektumot használja, definiálja a kefét forrásként, és hivatkozzon rá XAML-ben, ahelyett, hogy inline definiálná az ecsetet. Ez a metódus létrehoz egy példányt, és újra felhasználja azt, míg az XAML-ben beágyazott ecsetek definiálása minden elemhez létrehoz egy új példányt.
A következő jelölésminta ezt a pontot szemlélteti:
<StackPanel.Resources>
<LinearGradientBrush x:Key="myBrush" StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="GoldenRod" Offset="0" />
<GradientStop Color="White" Offset="1" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</StackPanel.Resources>
<!-- Non-shared Brush object. -->
<Label>
Label 1
<Label.Background>
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="GoldenRod" Offset="0" />
<GradientStop Color="White" Offset="1" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Label.Background>
</Label>
<!-- Shared Brush object. -->
<Label Background="{StaticResource myBrush}">Label 2</Label>
<Label Background="{StaticResource myBrush}">Label 3</Label>
Statikus erőforrások használata, ha lehetséges
A statikus erőforrások egy már definiált erőforrásra mutató hivatkozással bármilyen XAML tulajdonságattribútum értékét biztosítják. Az erőforrás keresési viselkedése hasonló a fordítási idő alatti kereséshez.
Egy dinamikus erőforrás viszont létrehoz egy ideiglenes kifejezést a kezdeti fordítás során, és így elhalasztja az erőforrások keresését addig, amíg a kért erőforrásértékre ténylegesen szükség nem lesz egy objektum létrehozásához. Az erőforrás keresési viselkedése hasonló a futásidejű kereséshez, ami teljesítménybeli hatást gyakorol. Ha lehetséges, használjon statikus erőforrásokat az alkalmazásban, csak akkor használjon dinamikus erőforrásokat, ha szükséges.
Az alábbi korrektúraminta mindkét erőforrástípus használatát mutatja be:
<StackPanel.Resources>
<SolidColorBrush x:Key="myBrush" Color="Teal"/>
</StackPanel.Resources>
<!-- StaticResource reference -->
<Label Foreground="{StaticResource myBrush}">Label 1</Label>
<!-- DynamicResource reference -->
<Label Foreground="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">Label 2</Label>
Lásd még
.NET Desktop feedback