Desempenho do Xamarin.Mac
Visão geral
Aplicativos Xamarin.Mac são semelhantes a Xamarin.iOS e muitas das mesmas sugestões de desempenho são aplicáveis:
Mas há inúmeras sugestões específicas para macOS que podem ser úteis.
Preferir a estrutura de destino moderna
Há várias Estruturas de Destino disponíveis para o aplicativo Xamarin.Mac com diferentes características de desempenho e recursos.
Quando for possível, prefira a Moderna e trabalhe com bibliotecas dependentes para adicionar suporte. Somente a Estrutura de Destino Moderna permite a vinculação, que pode reduzir drasticamente os tamanhos de assembly. Isso será importante principalmente no momento em que habilitar a AOT, uma vez que a compilação da AOT dos assemblies completos pode produzir pacotes finais grandes.
Habilitar o vinculador
O tempo de inicialização, tanto no carregamento quanto no JIT (Just In Time), é escalonado um pouco linearmente com o tamanho de seus binários finais. A maneira mais fácil de melhorar isso é removendo o código morto com o vinculador.
Enquanto essa sugestão se aplica principalmente aos usuários da Estrutura de Destino Moderna, o uso da Vinculação de Plataforma também pode fornecer um aumento de desempenho limitado.
Habilitar AOT quando apropriado
Outra faceta do desempenho de inicialização é a compilação JIT dos assemblies em código de computador. A compilação AOT (Ahead of Time) pode reduzir significativamente o tempo de inicialização, mas acompanha diversas compensações abordadas na documentação de AOT.
Assegurar delegados com bom desempenho
Muitos aplicativos Xamarin.Mac são centralizados em torno de exibições do Cocoa como NSCollectionView
, NSOutlineView
ou NSTableView
. Geralmente, essas exibições são alimentadas por classes Delegate
e DataSource
que você fornece ao Cocoa, respondendo perguntas sobre o que exibir.
Muitos desses pontos de entrada são invocados com frequência e, ocasionalmente, várias vezes por segundo durante a rolagem.
Verifique se que essas funções retornam valores que são calculados facilmente ou use as informações já armazenadas em cache, para impedir o bloqueio da interface do usuário.
Usar APIs fornecidas pelo Cocoa para reutilização de exibições
Várias exibições do Cocoa que contêm muitas células ou exibições filhas (como NSCollectionView
, NSOutlineView
e NSTableView
) fornecem APIs para criar e reutilizar as exibições. Essas APIs criam pools de itens compartilhados e evitam problemas de desempenho ao rolar pelas exibições rapidamente.
Usar async e não bloquear a interface do usuário
Aplicativos da área de trabalho geralmente processam grandes quantidades de dados e é muito fácil bloquear o thread de interface do usuário esperando por uma operação síncrona.
Sempre que possível, use async e threads para evitar o bloqueio da interface do usuário.
Para operações de longa duração, considere as opções indicadas no HIG da Apple para notificar os usuários.