Xamarin.Mac-LeistungXamarin.Mac performance

ÜbersichtOverview

Xamarin.Mac-Anwendung ähneln Xamarin.iOS-Anwendungen. Daher gelten ähnliche Leistungsempfehlungen für beide Anwendungsarten:Xamarin.Mac applications are similar to Xamarin.iOS, and many of the same performance suggestions are applicable:

Es gibt allerdings auch einige nützliche Empfehlungen, die nur für macOS gelten.but there are a number of macOS specific suggestions that may be helpful.

Bevorzugen des Zielframeworks „Modern“Prefer modern target framework

Es stehen mehrere Zielframeworks für Xamarin.Mac-Anwendungen mit unterschiedlichen Merkmalen und Features zur Verfügung.There are multiple Target Frameworks available to Xamarin.Mac application with different performance characteristics and features.

Ziehen Sie wenn möglich immer das Framework „Modern“ vor, und arbeiten Sie mit abhängigen Bibliotheken, um die Unterstützung zu erhöhen.When possible, prefer Modern and work with dependent libraries to add support. Nur das Zielframework „Modern“ lässt Verknüpfungen zu, wodurch Ihre Assemblygrößen drastisch reduziert werden können.Only the Modern Target Framework allows linking which can drastically reduce assembly sizes. Dies wird bei der Aktivierung von AOT besonders wichtig, das die AOT-Kompilierung (Ahead-of-time-Kompilierung) vollständiger Assemblys zu großen endgültigen Bündeln führen kann.This becomes especially important when enabling AOT, as AOT compilation of Full assemblies can produce large final bundles.

Aktivieren des LinkersEnable the linker

Die Startzeit wird sowohl beim Laden als auch bei der JIT-Kompilierung (Just-In-Time) ein Stück weit linear mit der Größe Ihrer endgültigen Binärdateien skaliert.Startup time, both in load and "Just In Time" (JIT), scales somewhat linearly with the size of your final binaries. Dies können Sie am einfachsten optimieren, indem Sie toten Code mit dem Linker entfernen.The easiest way to improve this is by removing dead code with the linker.

Während diese Empfehlung hauptsächlich für Benutzer des Zielframeworks „Modern“ gilt, kann die Plattformverknüpfung die Leistung ebenfalls geringfügig erhöhen.While this suggestion primarily applies to Modern Target Framework users, use of Platform Linking can provide a limited performance boost as well.

Aktivieren der AOT-Kompilierung (falls angemessen)Enable AOT when appropriate

Ein weiterer Faktor der Startleistung ist die JIT-Kompilierung von Assemblys in Computercode.Another facet of startup performance is the JIT compilation of assemblies into machine code. Die Ahead-of-time-Kompilierung (AOT) kann die Startzeit deutlich senken, führt aber auch zu Einbußen. Informationen dazu finden Sie in der AOT-Dokumentation.Ahead of Time (AOT) compilation can significantly reduce startup time, but comes with a number of tradeoffs covered in the AOT documentation.

Bereitstellen leistungsfähiger DelegatenEnsure performant delegates

Viele Xamarin.Mac-Anwendungen bauen auf Cocoa-Ansichten wie etwa NSCollectionView, NSOutlineView oder NSTableView auf.Many Xamarin.Mac applications are centered around Cocoa views such as NSCollectionView, NSOutlineView, or NSTableView. Diese Ansichten werden häufig durch die Klassen Delegate und DataSource unterstützt, die Sie für Cocoa bereitstellen. Dadurch wird die Anzeige bestimmt.Often these views are powered by Delegate and DataSource classes you provide to Cocoa, answering questions on what to display.

Viele dieser Einstiegspunkte werden häufig aufgerufen, beim Scrollen manchmal mehrmals in der Sekunde.Many of these entry points are invoked often, sometimes multiple times per second when scrolling.

Achten Sie darauf, dass diese Funktionen Werte zurückgeben, die leicht zu berechnen sind oder die zwischengespeicherte Informationen verwenden, um ein Blockieren der Benutzeroberfläche zu verhindern.Make sure these functions return values that are easily calculated or use information already cached, to prevent the user interface from blocking.

Verwenden von Cocoa-APIs für das Wiederverwenden von AnsichtenUse Cocoa-provided APIs for reusing views

Viele Cocoa-Ansichten, die viele untergeordnete Ansichten oder Zellen beinhalten (wie z.B. NSCollectionView, NSOutlineView und NSTableView) bieten APIs zum Erstellen und Wiederverwenden von Ansichten.Many Cocoa views that contain many child views or cells (such as NSCollectionView, NSOutlineView, and NSTableView) provide APIs for creating and reusing views. Diese erstellen Pools aus gemeinsam verwendeten Elementen und verhindern Leistungsprobleme beim schnellen Scrollen durch Ansichten.These create pools of shared items and prevent performance issues when scrolling through the views quickly.

Verwenden von „Async“ und Vermeiden der Blockierung der BenutzeroberflächeUse async and do not block the UI

Desktopanwendungen verarbeiten häufig große Datenmengen. Daher ist es sehr leicht, den UI-Thread durch das Warten auf einen synchronen Vorgang zu blockieren.Desktop applications often process large quantities of data and it is very easy to block the UI thread waiting on a synchronous operation.

Verwenden Sie deshalb wenn möglich async und Threads, um das Blockieren der UI zu verhindern.Whenever possible, use async and threads to prevent blocking the UI.

Ziehen Sie für lange Vorgänge NSProgressIndicator oder andere in den Benutzeroberflächen-Richtlinien von Apple erklärte Optionen in Betracht, um Benutzer zu benachrichtigen.For long running operations consider using NSProgressIndicator or other options noted in Apple’s HIG to notify users.