在托管VS中不受管理纯粹的不受管理

时间:2014-05-25 15:02:22

标签: c++ performance stack unmanaged managed

托管代码(C#)操作的非托管代码(CPP)是否具有与其他非托管代码操作相同的性能(堆栈是否运行相同等)?

即。 - 如果我从MyC调用MyCppApp中的代码,它是否具有与从MyCpp2App调用的相同的性能?

我知道互操作行为造成的损失,但是把它们放在一边,我的问题是关于CPP代码执行本身的性能。

谢谢, S

2 个答案:

答案 0 :(得分:2)

是的,但请记住,调用未托管的应用程序可能需要更长时间,因为需要将数据从托管缓冲区复制到非托管缓冲区。

这是.NET和COM互操作的问题之一 - 问题在于为了离开托管环境必须执行的指令数量(~50) - 这使得整个过程有点慢。

另外请注意,在最终阶段,托管代码将使用JIT编译转换为适当的机器代码。

答案 1 :(得分:2)

一旦控制在非托管代码中,托管代码调用的事实对CPU的作用没有任何影响。无论调用者如何,CPU都执行相同的指令。事实上,CPU没有"来电者的概念。

因此无论谁调用一段代码,性能都是一样的。 (假设,通话费用为零。)