Prestazioni di Xamarin.Mac

Panoramica

Le applicazioni Xamarin.Mac sono simili a Xamarin.iOS e molti degli stessi suggerimenti relativi alle prestazioni sono validi:

ma esistono alcuni suggerimenti specifici per macOS che possono risultare utili.

Preferire il framework di destinazione moderno

Per l'applicazione Xamarin.Mac sono disponibili più framework di destinazione con caratteristiche e funzionalità di prestazioni diverse.

Quando possibile, preferire l'approccio moderno e usare le librerie dipendenti per aggiungere il supporto. Solo il framework di destinazione moderno consente il collegamento che può ridurre in misura significativa le dimensioni degli assembly. Ciò diventa particolarmente importante quando si abilita AOT poiché la compilazione AOT di assembly completi può produrre bundle finali di grandi dimensioni.

Abilitare il linker

Il tempo di avvio, in caricamento e "Just-In-Time" (JIT), si mantiene piuttosto in linea con le dimensioni dei file binari finali. Il modo più semplice per migliorarlo è la rimozione del codice non utilizzato con il linker.

Sebbene questo suggerimento sia rivolto principalmente agli utenti del framework di destinazione moderno, anche l'uso del collegamento alla piattaforma può contribuire a un piccolo aumento delle prestazioni.

Abilitare AOT quando appropriato

Un altro aspetto delle prestazioni di avvio è la compilazione JIT di assembly nel codice macchina. La compilazione Ahead Of Time (AOT) può ridurre in modo significativo il tempo di avvio, ma comporta alcuni compromessi descritti nella documentazione AOT.

Usare delegati con prestazioni elevate

Molte applicazioni Xamarin.Mac si basano sulle visualizzazioni Cocoa, ad esempio NSCollectionView, NSOutlineView o NSTableView. Queste visualizzazioni sono spesso supportate dalle classi Delegate e DataSource fornite a Cocoa che rispondono a domande sui contenuti da visualizzare.

Molti di questi punti di ingresso vengono richiamati spesso, anche più volte al secondo durante lo scorrimento.

Per evitare che l'interfaccia utente si blocchi, verificare che queste funzioni restituiscano valori facilmente calcolabili o che usino informazioni già memorizzate nella cache.

Usare le API offerte da Cocoa per riusare le visualizzazioni

Molte visualizzazioni Cocoa contenenti molte visualizzazioni o celle figlio, ad esempio NSCollectionView, NSOutlineView e NSTableView, offrono API per la creazione e il riuso delle visualizzazioni. Queste creano pool di elementi condivisi ed evitano problemi di prestazioni durante lo scorrimento rapido delle visualizzazioni.

Usare l'approccio asincrono e non bloccare l'interfaccia utente

Le applicazioni desktop spesso elaborano grandi quantità di dati e può facilmente accadere che il thread dell'interfaccia utente si blocchi in attesa di un'operazione sincrona.

Usare quando possibile l'approccio asincrono e i thread per evitare di bloccare l'interfaccia utente.

Per le operazioni a esecuzione prolungata valutare l'uso di NSProgressIndicator o di altre opzioni indicate nelle linee guida HIG di Apple per la notifica agli utenti.