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-alkalmazás tervezése hatással lehet a teljesítményére azáltal, hogy szükségtelen többletterhelést okoz az elrendezés kiszámításában és az objektumhivatkozások érvényesítésében. Az objektumok felépítése, különösen futásidőben, hatással lehet az alkalmazás teljesítményjellemzőire.
Ez a témakör teljesítményjavaslatokat tartalmaz ezeken a területeken.
Elrendezés
A "layout pass" kifejezés azt a folyamatot jelöli, amely során egy Panel-származtatott objektum gyermekelemeit lemérik és elrendezik, majd megjelenítik a képernyőn. Az elrendezési átadás matematikailag intenzív folyamat – minél nagyobb a gyűjteményben lévő gyermekek száma, annál nagyobb a szükséges számítások száma. Például minden alkalommal, amikor egy gyermek UIElement objektum a gyűjteményben megváltoztatja a pozícióját, lehetősége van arra, hogy az elrendezési rendszer új pass-t aktiváljon. Az objektum jellemzői és az elrendezés viselkedése közötti szoros kapcsolat miatt fontos megérteni, hogy milyen típusú események hívhatják meg az elrendezési rendszert. Az alkalmazás jobban teljesít, ha a lehető legnagyobb mértékben csökkenti az elrendezési futások szükségtelen meghívásait.
Az elrendezési rendszer két fázist hajt végre a gyűjtemény minden gyermektagja esetében: egy mérési fázist és egy elrendezési fázist. Minden gyermekobjektum saját felülbírált implementációt biztosít a Measure és Arrange metódusok számára, hogy saját elrendezési viselkedést biztosítson. A legegyszerűbb elrendezés egy rekurzív rendszer, amely egy méretezhető, elhelyezett és a képernyőn rajzolt elemet eredményez.
A gyermek UIElement objektum először az alaptulajdonságainak mérésével kezdi meg az elrendezési folyamatot.
A rendszer kiértékeli az objektum mérethez kapcsolódó FrameworkElement tulajdonságait, például Width, Heightés Margin.
Panel-specifikus logikát alkalmazunk, például a DockDockPanel tulajdonságát vagy a OrientationStackPanel tulajdonságát.
A tartalom elrendezése vagy elhelyezése az összes gyermekobjektum mérése után történik.
A gyermekobjektumok gyűjteménye a képernyőre kerül.
Az elrendezés-átadási folyamat újra meghívódik, ha a következő műveletek bármelyike történik:
A rendszer hozzáad egy gyermekobjektumot a gyűjteményhez.
A rendszer egy LayoutTransform alkalmaz a gyermekobjektumra.
A UpdateLayout metódust a gyermekobjektumra hívják meg.
Amikor egy függőségi tulajdonság értékében bekövetkező változás olyan metaadatokkal van megjelölve, amelyek befolyásolják a mérési vagy elrendezési folyamatokat.
A leghatékonyabb panel használata, ahol lehetséges
Az elrendezési folyamat összetettsége közvetlenül a használt Panelszármaztatott elemek elrendezési viselkedésén alapul. Egy Grid vagy StackPanel vezérlő például sokkal több funkciót biztosít, mint egy Canvas vezérlőelem. Ennek a funkciónövekedésnek az ára a teljesítményköltségek nagyobb mértékű növekedése. Ha azonban nincs szüksége a Grid vezérlő által biztosított funkciókra, akkor a kevésbé költséges alternatívákat kell használnia, például egy Canvas vagy egy egyéni panelt.
További információ: Panelek áttekintése.
A RenderTransform cseréje helyett annak frissítése
Előfordulhat, hogy frissíthet egy Transform-t, ahelyett, hogy RenderTransform tulajdonság értékeként cserélné le. Ez különösen igaz az animációs forgatókönyvekre. Meglévő Transformfrissítésével elkerülheti a szükségtelen elrendezésszámítást.
Építsd meg a fádat Top-Down
Amikor egy csomópontot hozzáadnak vagy eltávolítanak a logikai fáról, tulajdonság-érvénytelenítések történnek a csomópont szülőjén és annak összes gyermekén. Ennek eredményeképpen mindig felülről lefelé építkező mintát kell követni, hogy elkerülhető legyen a szükségtelen érvénytelenítések költsége a már ellenőrzött csomópontokon. Az alábbi táblázat azt mutatja be, hogy mi a különbség a végrehajtási sebességben a fa felülről lefelé és alulról felfelé történő felépítése között, ahol a fa 150 szint mély, egyetlen TextBlock és DockPanel minden szinten.
| Akció | faépítés (ms) | Render—tartalmazza a faépítést (ms) |
|---|---|---|
| Alulról felfelé | 366 | 454 |
| Felülről lefelé | 11 | 96 |
Az alábbi példakód bemutatja, hogyan hozhat létre lefelé egy fát.
private void OnBuildTreeTopDown(object sender, RoutedEventArgs e)
{
TextBlock textBlock = new TextBlock();
textBlock.Text = "Default";
DockPanel parentPanel = new DockPanel();
DockPanel childPanel;
myCanvas.Children.Add(parentPanel);
myCanvas.Children.Add(textBlock);
for (int i = 0; i < 150; i++)
{
textBlock = new TextBlock();
textBlock.Text = "Default";
parentPanel.Children.Add(textBlock);
childPanel = new DockPanel();
parentPanel.Children.Add(childPanel);
parentPanel = childPanel;
}
}
Private Sub OnBuildTreeTopDown(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim textBlock As New TextBlock()
textBlock.Text = "Default"
Dim parentPanel As New DockPanel()
Dim childPanel As DockPanel
myCanvas.Children.Add(parentPanel)
myCanvas.Children.Add(textBlock)
For i As Integer = 0 To 149
textBlock = New TextBlock()
textBlock.Text = "Default"
parentPanel.Children.Add(textBlock)
childPanel = New DockPanel()
parentPanel.Children.Add(childPanel)
parentPanel = childPanel
Next i
End Sub
További információ a logikai fáról az alábbi hivatkozásnál található: Fák a WPF.
Lásd még
.NET Desktop feedback