gpt4 book ai didi

c# - .NET Native 和 Ngen.exe 有什么区别?

转载 作者:IT王子 更新时间:2023-10-29 04:09:28 29 4
gpt4 key购买 nike

标题说明了一切。我希望有人能向我解释 .NET Native 带来了什么,而我们在 Ngen.exe 中还没有。

最佳答案

您可以将 .NET Native 视为桌面 CLR 使用的 NGen 技术的演变。 .NET Native 和 NGEN 在几个主要方面有所不同 -

  • 运行时依赖性 - NGEN 使用完整的桌面 CLR,.NET Native 使用在应用程序本地的重构运行时 (mrt100_app.dll)。 .NET Native 运行时已经过重构,可以将大部分功能从应用程序中移出并移至代码生成工具链中。这使得它更小,玩得更多,并且(希望)在运行时更容易调试。 .NET Native 应用程序也是自包含的,这是应用程序的一个有用属性。
  • native 图像依赖项 - NGEN 图像与其运行所针对的 CLR 及其依赖程序集的 NGEN 图像紧密绑定(bind)。例如,当对 mscorlib.dll 进行错误修复时,这会导致几乎所有 NGEN 图像都需要重新生成。
  • Compilation Location - .NET Native 的目的是在应用程序商店中生成 native 代码。 NGEN 在最终用户设备上生成 native 代码。您当然可以想象,对于某些类别的设备(即手机、平板电脑),您宁愿不浪费最终用户的电池生命周期来生成代码。在商店中编译还允许 .NET Native 花费更多的时间进行编译,因此允许它应用比 NGEN 负担得起的更多优化。
  • 代码生成器 - NGEN 使用 JIT 编译器生成代码,.NET Native 使用 Visual C++ 编译器的后端,这使我们能够应用自动矢量化等优化,这些优化太昂贵而无法应用在 JIT 案例中
  • 整个程序分析 - NGEN 一次为单个程序集生成代码,这允许 NGEN 图像用于多个应用程序上下文。 .NET Native 为整个应用程序包生成代码,这允许它应用更广泛的优化集(例如,完全丢弃在运行时从未使用过的代码)。这与重构框架相结合,使这些优化尽可能地发挥作用。
  • IL Fallback - NGEN 图像包含程序集的 native 代码和 MSIL(以及其他数据结构)。如果在运行时发生某些事情导致 CLR 需要它在 NGEN 镜像中找不到的 native 代码,它可以回退到 JITing。在 .NET Native 当前的开发人员预览中, native 镜像中仅存在 native 代码。这意味着如果代码不在图像中,它将永远不会在运行时执行。

关于c# - .NET Native 和 Ngen.exe 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22907111/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com