我对.Net编程非常陌生,大约一年。

几天前,我查看了几篇有关混合模式组装的文章,
出于好奇,我很难理解很多。


如果可以使用C#/ VB.NET轻松完成P / Invoke,为什么Microsoft引入了混合模式汇编?
混合模式程序集是否比纯.Net程序集执行得更快?


由于.Net是CLR(非常类似于VM),所以我最好的猜测是在混合模式下编译的程序集也将在CLR中使用,从而最终会降低性能。

请帮我解决我的困惑!

最佳答案

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

它不是设计使代码更快。从托管代码过渡到本机代码执行需要付出一定的代价。它是经过高度优化的,如果您正确执行操作,则只需支付在垃圾收集器可以识别的堆栈上编写cookie的费用,这样就可以避免在非托管堆栈帧中查找对象引用。成本高,但cpu周期很少。但是,当您需要转换数据时,可能会产生额外的费用。字符串是典型示例。或固定一个托管对象,使其不能被收集器移动,一个典型的例子是数组。

但是可以,您当然可以使用混合模式程序集来解决性能问题。如果您可以限制转换的次数,并且可以利用C或C ++编译器生成高度优化的代码的能力,那么您可能会领先。没有任何魔术公式可以说明问题,而且克服抖动肯定不是那么容易。鉴于它在时间限制下运行,尽管它不能完全击败C编译器的优化器,但它具有非常有效的优化器。您编写的代码的质量最重要。

始终首先使用探查器来消除任何风帽,找到实际的热点并确保值得尝试。

10-02 01:24