我在我的C#代码中使用了一个特定的命令,它运行良好。然而,据说它在“非托管”代码中表现不佳。
什么是托管或非托管代码?
我在我的C#代码中使用了一个特定的命令,它运行良好。然而,据说它在“非托管”代码中表现不佳。
什么是托管或非托管代码?
托管代码:编译器编译后生成的中间语言(MSIL)形式的代码,由CLR直接执行,称为托管代码。 例如:.net框架支持的所有61种语言代码。
非托管代码:在.net之前开发的代码,其MSIL形式不可用,并且由CLR直接执行,而CLR将重定向到操作系统,这被称为非托管代码。 例如:COM、Win32 API。
另一方面,如果您想使用在 .NET 框架之前编写的库,则可以使用某些限制,但请记住,由于 CLR 当时还不存在,所以现在 CLR 将无法理解并重新编译此代码。这将被称为 非托管代码
。请注意,由第三方创建的用于提供某些功能/工具的库/程序集也可能被视为不兼容 CLR 的非托管代码。
通俗来讲,托管代码 是指您的 CLR 可以理解并可以自行编译以进行进一步执行的内容。在 .NET 框架中(从任何适用于 .NET 框架的语言),当代码传递到 CLR 时,代码会提供一些元数据信息,以便 CLR 可以为您提供 此处 指定的功能。其中一些功能包括垃圾回收、性能改进、跨语言集成、内存管理
等。
另一方面,非托管代码是机器特定的,可以直接使用,无需进一步处理。
来自Pro C# 5和.NET 4.5框架:
托管代码与非托管代码: 关于C#语言最重要的一点可能是理解它只能生成在.NET运行时内执行的代码(您永远不能使用C#构建本机COM服务器或非托管的C/C++应用程序)。正式地说,用于描述针对.NET运行时的代码的术语是托管代码。 包含托管代码的二进制单元称为程序集(稍后将详细介绍有关程序集的更多详细信息)。 相反,无法直接由.NET运行时托管的代码称为非托管代码。