2010-10-24 85 views
1

我有一个C++/CLI库调用了很多本地C++方法。我已阅读了许多线索,声明不应混用托管和非托管代码。我无法找到任何说明如何避免这些开关以及为什么它会导致性能问题。有人可以分享最佳做法吗?混合模式C++/CLI性能注意事项 - 最佳实践

回答

3

使用C++/CLI的唯一原因是支持混合托管代码和本地代码。如果一切都被管理,那么使用C#或VB,如果一切都是本地的,那么使用C或C++。或者你喜欢的任何语言。显然避免混合是无意义的。

从管理到非管理有一小部分开销。 C++/CLI编译器会自动生成一些机器代码,这些代码在堆栈上推送一个“cookie”,旨在防止垃圾收集器陷入非托管堆栈帧,并将该帧上的指针错误解释为托管对象引用。成本约7纳秒,给予或承担。

+2

特别注意:C++ interop比p/invoke便宜得多。当满足两个条件时,C++/CLI将使用C++ interop:您正在构建混合模式程序集(不是'/ clr:pure'),并且使用正常C++原型声明函数(通常来自本机头文件),而不是p/invoke'DllImport'属性。 – 2010-10-25 14:40:27