是否可以使用垃圾收集创建本机代码?

时间:2014-04-08 18:44:56

标签: .net c++-cli

是否可以使用垃圾收集编写C ++ / CLI代码,垃圾收集将编译为本机机器代码(提前,而不是JIT)?

1 个答案:

答案 0 :(得分:2)

简而言之:否(但见下文)

长期:

如果您使用C ++ / CLI,则会自动使用IL-Code,可以使用dotPeek或其他工具轻松地对其进行反编译。但你有GC;)

如果您只想让C ++ / CLI项目的某些部分是本机的,那么您可以为这些文件禁用“/ clr”选项(或者更好:只为实际需要的文件启用/ clr选项。净支持!)。在原生部分坚果你没有GC;(

或者,您也可以使用pragma managed/unmanaged

标记代码的特殊部分
#pragma managed
#pragma unmanaged

NGEN创建程序集的预编译图像,但不隐藏.net代码;所以这只有在你的装配有启动计时问题时才有用。如果你有UI应用程序通常只会发生这种情况。另外一个副作用是ngened assenblies有时比jitted程序集慢。所以我从不使用ngen ......

<强> BUT:

但MS现在已经看到这有几个问题。 MS在这种情况下正在做一些改进。目前仅适用于Store-Apps,但我认为这也将改进为“普通”.NET应用程序。 这意味着:您可以使用完整的GC支持编写.NET应用程序 并且这些应用程序将编译为NATIVE代码,而不使用IL数据。仅适用于需要IL数据的特殊情况(如XmlSerializer)。

有关更多信息,请参阅: 的 Microsoft .NET Native