.NET 代码优化、编译与程序集加载全解析
1. 代码裁剪
代码裁剪是一个确定哪些代码可以安全省略的过程。应用程序代码可能没有直接引用某个特定的库类型,但该类型可能会通过反射加载,或者在运行时被代码使用。
1.1 裁剪的注意事项
裁剪通常与依赖反射在运行时发现类型信息的机制不兼容。不过,一些功能(如某些序列化特性)提供了对裁剪友好的操作模式。
1.2 运行时库的注解
运行时库包含注解,帮助编译器理解如何裁剪代码,并在使用不兼容裁剪的功能时发出警告。在 .NET 7.0 之前,没有注解的组件默认被视为不可裁剪,但现在 SDK 会分析未注解的组件,以检测是否使用了不友好裁剪的功能。如果能确定组件未使用这些功能,就可以安全地裁剪代码。
2. 提前编译(AOT)
C# 编译器生成的代码是一种非特定 CPU 的形式,称为 IL,通常在运行时首次需要时编译为机器代码,即即时编译(JIT)。不过,也可以指示 .NET SDK 在构建时生成机器语言,这就是提前编译(AOT)。.NET 提供了两种 AOT 形式:ReadyToRun 和 Native AOT。
2.1 ReadyToRun(R2R)
ReadyToRun 是一种混合模型,在构建时生成本地代码,并将其添加到程序集中。所有的 IL 和类型信息仍然存在。R2R 是一种保守的选择,即使编译后的代码在不同的 CPU 架构上运行,由于 IL 仍然存在,CLR 可以回退到 JIT 编译。
2.1.1 R2R 的优点
主要优点是可以提高应用程序的启动时间。只要嵌入程序集
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



