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

sun*_*dar 5 c# performance

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

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

我检查了msdn引用,似乎在实际调用之前会发生某种预处理.在链接期间,加载dll.

我想了解在什么情况下.net应用程序表现优异?

Han*_*ant 5

pinvoke marshaller是.NET框架中最重的优化代码块之一.非常重要的是,在非托管操作系统上运行托管程序时,您无法看到许多pinvoke.开销量变化很大.当DLL已经加载并且pinvoked函数的参数是简单的整数类型时,它只是少数几个cpu周期.例如,字符串转换是必要的,需要数百个周期.

在任何情况下,它都不会比原生呼叫更快.准确地测量仅仅少数几个周期的开销是困难的.请记住,您可能会无意中测量测试程序的性能而不是pinvoke调用.