从托管代码调用非托管代码的性能

本文关键字:性能 非托管代码 调用 托管代码 | 更新日期: 2023-09-27 18:10:11

我有一个win32 dll和两个使用相同dll的应用程序。一个是在非托管空间中使用c编写的,另一个是使用pinvoke调用非托管代码的。net应用程序。

有时候。net应用程序的性能比c应用程序好。从技术上讲,从。net调用非托管代码会导致性能开销,但在这种情况下不会。

我检查了msdn引用,似乎在实际调用之前发生了某种预处理。在链接过程中,dll被加载。

我想了解在什么情况下。net应用程序优于?

从托管代码调用非托管代码的性能

pinvoke编组器是。net框架中最重要的优化代码块之一。非常重要的一点是,在非托管操作系统上运行托管程序时,您无法看到许多pinvoke。开销的数量变化很大。当DLL已经加载并且被调用函数的参数是简单的整型时,只需要几个cpu周期。到数百个循环,例如,当需要进行字符串转换时。

在任何情况下都不会比本机调用快。精确测量只有几个周期的开销是很困难的。请记住,您可能会无意中度量测试程序的性能,而不是使用pinvoke调用。