OK, desenvolvedores do MAUI, ICYMI, aqui estão as atualizações de diagnóstico e rastreamento de métricas do .NET MAUI lançadas com o .NET 10 que você precisa saber!
A ferramenta mais importante para a tomada de decisões são os dados: métricas, estatísticas e números reais que indicam o que você está fazendo bem e o que precisa melhorar. Sem eles, você está literalmente adivinhando.
Imagine ir ao médico fazer um exame oftalmológico e, quando ele chega, decide te dar um diagnóstico sem te avaliar, sem exames, sem nada.
Você confiaria nesse resultado? Claro que não. 🙆♀️
Mas se esse mesmo médico te mandar fazer exames, avaliar, comparar e explicar exatamente o que está acontecendo? Então você se sentiria mais confiante, porque sabe que existem dados reais por trás do diagnóstico.
A mesma coisa acontece com nossos aplicativos: você não pode otimizar, melhorar ou consertar o que não consegue observar. Se você não possui métricas que informam com que frequência uma tela falha, quanto tempo leva para exibir seus elementos ou onde o tempo está sendo perdido durante o ciclo de layout, você está trabalhando às cegas.
Ter métricas claras não apenas ajuda você, como desenvolvedor, a detectar problemas com mais rapidez, mas também permite que você forneça um serviço melhor aos seus usuários, porque você pode antecipar problemas antes mesmo que seu usuário ou cliente perceba que algo está errado.
Neste artigo falaremos sobre o novo diagnóstico abrangente e rastreamento de métricas para .NET MAUI—incrivelmente útil para identificar problemas de desempenho e entender o que realmente está acontecendo dentro do ciclo de layout.
Em primeiro lugar, uma revisão rápida do .NET Aspire
Antes de mergulhar nos diagnósticos, é importante entender, em alto nível, o que o .NET Aspire oferece, porque é o ambiente onde você poderá ver os dados de diagnóstico salvos.
É um novo modelo de aplicativo no ecossistema .NET, e o .NET MAUI para .NET 10 agora inclui um modelo de projeto que cria um projeto de padrões de serviço .NET Aspire.
Este projeto apresenta métodos de extensão que conectam automaticamente a telemetria e a descoberta de serviços em seu aplicativo. Na prática, isso significa:
- Telemetria permite que seu aplicativo colete, meça e emita dados de tempo de execução para monitoramento e análise.
- Descoberta de serviço permite que seu aplicativo localize e se comunique com outros serviços sem depender de URLs codificados. Em vez de apontar para endpoints fixos, seu aplicativo se conecta usando um nome de serviço.
Diagnóstico
A Microsoft adicionou um sistema completo de diagnóstico e métricas para aplicativos .NET MAUI. Seu foco principal é monitorar o desempenho do layout – como as visualizações são medidas e organizadas na tela – e é construído em uma arquitetura extensível que pode facilmente suportar futuros recursos de observabilidade.
Basicamente, a infraestrutura central de diagnóstico inclui estes três pontos principais:
Fonte de atividade: “Microsoft.Maui”
Este é responsável por emitir atividades (traços) quando o .NET MAUI executa operações de layout. Graças a isso, podemos saber coisas como:
- Quando um
Measure()ouArrange()a operação começa e termina - Quanto tempo leva cada operação
- Qual visão o desencadeou
Resumindo, ActivitySource registra cada etapa do processo de layout com informações detalhadas de tempo.
⚠️Contexto importante:
- Medir é o processo onde o .NET MAUI calcula e determina quanto espaço uma visualização precisa.
- Arranjoque acontece após o Measure, é onde o .NET MAUI posiciona a visualização na tela com seu tamanho e localização final.
Métricas: “Microsoft.Maui”
Através de um metro (um componente do sistema de métricas .NET), expõe métricas em diferentes formatos, como:
- Contadores: Para identificar quantas vezes um evento ocorre
- Histogramas: Para medir quanto tempo leva uma operação ou como seus valores são distribuídos
Basicamente, as métricas são responsáveis por fornecer os números brutos necessários para analisar o desempenho.
Chave de recurso: Meter.IsSupported
Isso permite que as métricas sejam habilitadas ou desabilitadas em tempo de execução para AOT/corte. Em outras palavras, funciona como um switch que permite ativar ou desativar seu sistema de coleta de métricas dependendo de suas necessidades.
Acompanhamento de desempenho de layout
Basicamente, é aqui que as operações de UI mais importantes—Measure() e Arrange()– são instrumentados. Em termos simples, cuida de:
Instrumentando IView.Measure() e IView.Arrange()
Isso significa que o .NET MAUI agora injeta medidas internas nesses métodos — conforme explicado anteriormente.
Quando falamos em “instrumentação”, queremos dizer adicionar métricas, logs ou rastreamentos dentro do código para que possamos medir, monitorar, diagnosticar ou analisar como essas operações se comportam.
Rastreia tempo, contagens e contexto detalhado
Ele registra quanto tempo cada Measure() e Arrange() a operação leva e quantas vezes ela foi executada e, o mais importante, adiciona tags e contexto avançados, como em qual tela ela aconteceu, qual layout a acionou e qual visualização estava envolvida. Isso lhe dá muito mais precisão ao diagnosticar e resolver problemas.
Instrumentação de alocação zero para desempenho ideal
Isso significa que toda a instrumentação adicionada para rastrear Measure() e Arrange() é implementado usando estruturas e um padrão using, portanto, gera zero alocações de heap. Em termos simples, o sistema de diagnóstico não cria lixo extra nem torna seu aplicativo lento ao medir o desempenho. Ele registra tudo com eficiência, sem afetar a capacidade de resposta da IU.
📊 Métricas coletadas
Todos os conceitos explicados acima são finalmente expostos através de um conjunto de métricas específicas:

Dados da documentação oficial.
Tags de diagnóstico são rótulos adicionados automaticamente pelo .NET MAUI a métricas e rastreamentos. Seu objetivo é fornecer contexto adicional sobre a visão responsável pela execução de um Measure() ou Arrange() operação.
Em termos simples, essas tags informam qual controle acionou a operação, onde ele estava localizado e seu tamanho.
As tags disponíveis são:
Todas as visualizações
Eles se aplicam a qualquer visualização no .NET MAUI.
Tag: element.type — Nome completo do tipo
Representa o nome completo do tipo do elemento visual que acionou a operação.
Por exemplo:
- Microsoft.Maui.Controls.Button
- Microsoft.Maui.Controls.Label
Essa tag ajuda a identificar se um controle específico está causando vários Measure() ou Arrange() chamadas.
Controles (Element/VisualElement)
Essas tags são adicionadas a todos os controles que herdam de Element ou VisualElement. Eles incluem:
- elemento.id: ID interno atribuído pela MAUI
- elemento.automation_id: Um ID personalizado definido por você (opcional), comumente usado para testes e acessibilidade
- elemento.class_id: O ClassId do controle
- elemento.style_id: ID interno associado aos estilos aplicados
- elemento.class: Descreve as características visuais do controle; ajuda você a entender qual estilo, modelo ou categoria visual ele tinha na época
- elemento.frame: Representa a posição final e o tamanho do controle na tela (por exemplo: x=0, y=34, largura=260, altura=55)
Onde você pode encontrar essas métricas?
Lembre-se no início do artigo quando falamos sobre .NET aspira?
Bem, é exatamente aí que você pode visualizar todas essas métricas.
Abaixo, incluí imagens da documentação oficial para que você possa visualizar como isso fica na prática.


✍️ Se você quiser se aprofundar no assunto, recomendo verificar o pull request de “(v3) Adicionar rastreamento de métricas de diagnóstico a aplicativos MAUI”.
Conclusão
E é isso! 🎉 Neste artigo, você explorou como o novo sistema de diagnóstico do .NET 10 aprimora a observabilidade em aplicativos .NET MAUI. Você aprendeu o que cada componente faz, como as operações de layout são instrumentadas e como as métricas são expostas para entender melhor o desempenho do seu aplicativo.
Agora você tem as ferramentas para tornar o diagnóstico seu aliado, ajudando a detectar problemas com mais rapidez, otimizar sua IU com mais confiança e criar aplicativos mais suaves e fáceis de manter.
Se você tiver alguma dúvida ou quiser que eu aborde mais tópicos relacionados, fique à vontade para deixar um comentário – ficarei feliz em ajudá-lo! 💚
Vejo você no próximo artigo! 🙋♀️✨
Referências
A explicação foi baseada na documentação oficial:





