3

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

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

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

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

由于 .Net 是 CLR(很像 VM),所以我最好的猜测是在混合模式下编译的程序集也将在 CLR 中,因此最终会降低性能。

请帮我解决我的困惑!

4

1 回答 1

6

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

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

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

始终首先使用分析器来消除任何故障,找到实际的热点并确保它值得尝试。

于 2012-12-08T16:47:39.547 回答