Share via


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.