Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Importante
A partir do Windows 10, versão 1703 (Creators Update), x:DeferLoadStrategy é substituído pelo atributo x:Load. Usar x:Load="False" é equivalente a x:DeferLoadStrategy="Lazy", mas fornece a capacidade de descarregar a interface do usuário, se necessário. Consulte o atributo x:Load para obter mais informações.
Você pode usar x:DeferLoadStrategy="Lazy" para otimizar o desempenho de inicialização ou criação de árvore do seu aplicativo XAML. Quando você usa x:DeferLoadStrategy="Lazy", a criação de um elemento e seus filhos é atrasada, o que diminui o tempo de inicialização e os custos de memória. Isso é útil para reduzir os custos de elementos que são mostrados com pouca frequência ou condicionalmente. O elemento será executado quando for referido a partir do código ou do VisualStateManager.
No entanto, o rastreamento de elementos adiados pela estrutura XAML adiciona cerca de 600 bytes ao uso de memória para cada elemento afetado. Quanto maior a árvore de elementos que você adiar, mais tempo de inicialização você economizará, mas ao custo de uma maior pegada de memória. Portanto, é possível usar demais esse atributo na medida em que seu desempenho diminui.
Uso de atributos XAML
<object x:DeferLoadStrategy="Lazy" .../>
Observações
As restrições para usar x:DeferLoadStrategy são:
- Você deve definir um x:Name para o elemento, pois precisa haver uma maneira de encontrar o elemento mais tarde.
- Você só pode adiar tipos que derivam de UIElement ou FlyoutBase.
- Você não pode adiar elementos raiz em uma Page, um UserControl ou um DataTemplate.
- Não é possível adiar elementos em um ResourceDictionary.
- Não é possível adiar XAML solto carregado com XamlReader.Load.
- Mover um elemento pai eliminará todos os elementos que não foram realizados.
Existem várias maneiras diferentes de realizar os elementos diferidos:
- Chame FindName com o nome que você definiu no elemento .
- Chame GetTemplateChild com o nome que você definiu no elemento .
- Em um VisualState, utilize um Setter ou uma animação Storyboard que tem como alvo o elemento adiado.
- Direcione o elemento adiado em qualquer Storyboard.
- Use uma associação direcionada ao elemento adiado.
Observação: uma vez iniciada a instanciação de um elemento, ele é criado no thread da UI, portanto, pode causar atrasos na interface do usuário se muita coisa for criada de uma só vez.
Uma vez que um elemento adiado é criado de qualquer uma das maneiras listadas anteriormente, várias coisas acontecem:
- O evento Loaded no elemento é acionado.
- Todas as ligações no elemento são avaliadas.
- Se você se registrou para receber notificações de alteração de propriedade na propriedade que contém o(s) elemento(s) diferido(s), a notificação será gerada.
Pode aninhar elementos adiados, no entanto, eles devem ser realizados começando pelo elemento mais externo. Se tentar instanciar um elemento filho antes que o elemento pai tenha sido instanciado, será gerada uma exceção.
Normalmente, recomendamos que se adie a renderização de elementos que não são visíveis no primeiro quadro. Uma boa diretriz para encontrar candidatos a serem adiados é procurar elementos que estão sendo criados com Visibilidade recolhida. Além disso, a interface do usuário que é acionada pela interação do usuário é um bom lugar para procurar elementos que você pode adiar.
Tenha cuidado com adiar elementos numa ListView, pois isso diminuirá o tempo de arranque, mas também poderá diminuir o desempenho durante a navegação, dependendo do que está a criar. Se estiveres à procura de melhorar o desempenho de panorâmica, consulta a extensão de marcação {x:Bind} e a documentação do atributo x:Phase.
Se o atributo x:Phase for usado em conjunto com x:DeferLoadStrategy , então, quando um elemento ou uma árvore de elementos for realizada, as associações serão aplicadas até e incluindo a fase atual. A fase especificada para x:Phase não afeta nem controla o diferimento do elemento. Quando um item de lista é reciclado como parte do movimento panorâmico, os elementos realizados se comportam da mesma maneira que outros elementos ativos, e as ligações compiladas ({x:Bind} bindings) são processadas usando as mesmas regras, incluindo o faseamento.
Uma diretriz geral é medir o desempenho do seu aplicativo antes e depois para garantir que você esteja obtendo o desempenho desejado.
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