是否可以使用垃圾收集来编写 C++/CLI 代码,并将其编译为 native 机器代码(提前,而不是 JIT)?
最佳答案
简而言之:否(但见下文)
长话短说:
如果您使用 C++/CLI,您会自动使用 IL-Code,它可以使用 dotPeek 轻松反编译。或其他工具。但你有GC;)
如果您只想让 C++/CLI 项目的某些部分成为 native ,那么您可以禁用该文件的“/clr”选项(或者更好:仅对真正需要 .网络支持!)。坚果 native 部分你没有 GC ;(
或者,您也可以使用 pragma managed/unmanaged 标记代码的特殊部分。
#pragma managed
#pragma unmanaged
NGEN 创建程序集的预编译镜像,但不隐藏 .net 代码;因此,只有当您的程序集存在启动计时问题时,这才有用。通常只有当您有 UI 应用程序时它才有意义。还有一个副作用是生成的组件有时比抖动的组件慢。所以我从不使用 ngen...
但是:
但是微软现在发现这有几个问题。 MS 正在针对这种情况进行一些改进。目前仅适用于商店应用程序,但我认为这也将改进以适用于“普通”.NET 应用程序。 这意味着:您可以编写具有完整 GC 支持的 .NET 应用程序,并且这些应用程序将编译为 native 代码,而无需使用 IL 数据。仅在特殊情况下您需要 IL 数据(如 XmlSerializer)。
更多信息请参见: <强> Microsoft .NET Native
关于.net - 是否可以通过垃圾收集创建 native 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22945655/