2013-03-22 13 views
9

Leggiamo questi codici, ho definito due UserControls simili in un progetto Windows Phone 8 e desidero davvero quale di essi sia migliore. Ho controllato la profilazione, sembra che siano quasi la stessa cosa.Grid e StackPanel, che offre prestazioni migliori?

UserControl 1, utilizzando la proprietà della griglia per progettare il layout.

<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}" Height="108"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
    </Grid.RowDefinitions> 

    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"></ColumnDefinition> 
     <ColumnDefinition Width="*"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 

    <Rectangle Grid.RowSpan="2" Grid.Row="0" Height="108" Width="54" Fill="Blue"></Rectangle> 
    <TextBlock Grid.Row="0" Grid.Column="1" Text="Caption" Style="{StaticResource PhoneTextExtraLargeStyle}"></TextBlock> 
    <TextBlock Grid.Row="1" Grid.Column="1" Text="URLURLURLURLURLURL" Style="{StaticResource PhoneTextSmallStyle}"></TextBlock> 
</Grid> 

UserControl 2, utilizzando StackPanel per progettare il layout.

<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}" Height="108"> 
    <StackPanel Orientation="Horizontal"> 
     <Rectangle Height="108" Width="54" Fill="Red"></Rectangle> 
     <StackPanel Orientation="Vertical"> 
      <TextBlock Text="Caption" Style="{StaticResource PhoneTextExtraLargeStyle}"></TextBlock> 
      <TextBlock Text="URLURLURLURLURLURL" Style="{StaticResource PhoneTextSmallStyle}"></TextBlock> 
     </StackPanel> 
    </StackPanel> 
</Grid> 

Sembra che il layout di base sia lo stesso. Ma quando uso XAML Spy per analizzare l'albero di visualizzazione, UserControl 1 ha meno nodi, ma costa un po 'più di memoria. Perché?

risposta

22

Potreste essere interessati alle risposte a questa domanda: In what order are Panels the most efficient in terms of render time and performance?

La risposta breve è che dipende da quanti bambini i pannelli hanno, e come tali elementi sono dimensionati e posizionati. Ma nella maggior parte dei casi, uno StackPanel sarà più efficiente di uno Grid in quanto ha sia un passaggio più veloce di misura e disposizione.

Per citare dal accepted answer:

Griglia

definisce un'area griglia flessibile che consiste di righe e colonne.

Questo può essere il pannello con prestazioni più elevate se si utilizza il dimensionamento proporzionale o il dimensionamento automatico. Il calcolo delle dimensioni degli elementi figlio può essere una combinazione complessa della dimensione nativa dell'articolo e il layout specificato dalla griglia. Il layout è anche il più complicato di tutti i pannelli . Prestazioni da lente a medie per il passaggio della misura e lenta fino alla prestazione media per il passaggio di arrangiamento.

StackPanel

Riordina elementi secondari in una singola linea che può essere orientato orizzontalmente o verticalmente.

StackPanel misura la propria figli utilizzando nativa o relativa dimensionamento in direzione opposta rispetto alla posizione e nativo dimensionamento nella direzione del suo orientamento (allineamento non fa nulla questa direzione). Questo lo rende un artista di medio livello in quest'area. Il pass per l'Arrangiamento è semplicemente, basta disporre gli articoli in ordine. Probabilmente il secondo miglior risultato per questo passaggio. Prestazioni medie per il passaggio di misura e prestazioni veloci per il passaggio di layout.

anche per quanto riguarda il consumo di memoria, entrambi gli oggetti sono diversi e assumere diverse quantità di memoria e un Grid ha RowDefinitions e ColumnDefinitions, in modo che contenga in realtà più oggetti che i vostri StackPanel

+0

Grazie per la risposta! – Eddie

Problemi correlati