托管代码(C#)操作的非托管代码(CPP)是否具有与其他非托管代码操作相同的性能(堆栈是否运行相同等)?
即。 - 如果我从MyC调用MyCppApp中的代码,它是否具有与从MyCpp2App调用的相同的性能?
我知道互操作行为造成的损失,但是把它们放在一边,我的问题是关于CPP代码执行本身的性能。
谢谢, S
答案 0 :(得分:2)
是的,但请记住,调用未托管的应用程序可能需要更长时间,因为需要将数据从托管缓冲区复制到非托管缓冲区。
这是.NET和COM互操作的问题之一 - 问题在于为了离开托管环境必须执行的指令数量(~50) - 这使得整个过程有点慢。
另外请注意,在最终阶段,托管代码将使用JIT编译转换为适当的机器代码。
答案 1 :(得分:2)
一旦控制在非托管代码中,托管代码调用的事实对CPU的作用没有任何影响。无论调用者如何,CPU都执行相同的指令。事实上,CPU没有"来电者的概念。
。因此无论谁调用一段代码,性能都是一样的。 (假设,通话费用为零。)