混合模式.NET程序集有更好的性能吗?

时间:2012-12-08 13:41:15

标签: c# .net clr mixed-mode

我对.Net编程很新,大约1年。

几天前我查了几篇与混合模式装配相关的文章, 出于好奇,我很难理解这一点。

  1. 为什么Microsoft引入混合模式程序集,如果可以使用C#/ VB.NET轻松完成P / Invoke?

  2. 混合模式程序集的执行速度是否比纯.Net程序集快?

  3. 由于.Net是CLR(很像VM),所以我最好的猜测是在混合模式下编译的汇编也会出现在CLR中,这样最终会降低性能。

    请帮助我解决我的困惑!

1 个答案:

答案 0 :(得分:6)

混合模式程序集的主要用例是必须与现有的 C或C ++代码互操作。当然很常见。

它不是设计使代码更快。从托管代码转换到本机代码执行会产生相关成本。它经过了大量优化,如果您这样做,那么您只需支付在垃圾收集器识别的堆栈上编写cookie的成本,这样就可以避免查看非托管堆栈帧以进行对象引用。成本但少数cpu周期。但是,当您需要翻译数据时可能会产生额外费用。字符串是规范的例子。或者固定托管对象,使收集器无法移动它,数组就是规范的例子。

但是,您当然可以使用混合模式程序集来解决性能问题。如果您可以限制转换的次数,并且您可以利用C或C ++编译器生成高度优化的代码的能力,那么您可以领先。没有任何神奇的公式可以表明你的意愿,它肯定不容易击败抖动。它有一个非常有效的优化器,虽然它不能完全击败C编译器的优化器,因为它在时间限制下运行。您编写的代码质量最重要。

首先使用探查器消除任何蠢事,找到实际的热点并确保它值得尝试。