Xamarin.Mac 性能

概述

Xamarin.Mac 应用程序类似于 Xamarin.iOS,许多相同的性能建议均适用:

但有很多特定于 macOS 的建议可能有所帮助。

首选新式目标框架

有许多性能特征和功能不同的目标框架可供 Xamarin.Mac 应用程序使用。

若可行,请首选“新式”并使用依赖库来添加支持。 只有新式目标框架允许可大幅缩减程序集大小的链接。 这一点在启用 AOT 时尤为重要,因为完整程序集的 AOT 编译会生成较大的最终捆绑包。

启用链接器

加载和“及时”(JIT) 中的启动时间在某种程序上随最终二进制文件的大小呈线性缩放。 最简单的改进方式是删除带链接器的死代码。

此建议主要适用于新式目标框架用户,使用平台链接也可在有限范围内实现性能提升。

适用时启用 AOT

启动性能的另一个方面是将程序集通过 JIT 编译为机器码。 预先 (AOT) 编译可大幅缩减启动时间,但存在很多折衷之处,详见 AOT 文档

确保性能委托

许多 Xamarin.Mac 应用程序围绕着 NSCollectionViewNSOutlineViewNSTableView 等 Cocoa 视图。 通常,这些视图由你提供给 Cocoa 的 DelegateDataSource 进行支持,用于解答有关显示内容的问题。

其中很多入口点经常被调用,有时在滚动时一秒被调用多次。

确保这些函数返回轻松计算的值,或使用已缓存的信息以防止用户界面遭到阻止。

使用 Cocoa 提供的 API 来重用视图

许多包含大量子视图或单元格的 Cocoa 视图(如 NSCollectionViewNSOutlineViewNSTableView)都提供 API 来创建和重用视图。 这些 API 在快速滚动视图时创建共享项目池并防止出现性能问题。

使用 async,不阻止 UI

桌面应用程序通常处理大量数据,非常易于阻止等待同步操作的 UI 线程。

只要可能,请使用 async 和线程来防止 UI 被阻止。

对于长时间运行的操作,请考虑使用 NSProgressIndicator 或 Apple HIG 中的其他选项来通知用户。