【问题标题】:Mixed mode C++/CLI performance considerations - best practices混合模式 C++/CLI 性能注意事项 - 最佳实践
【发布时间】:2011-04-29 18:46:15
【问题描述】:

我有一个调用许多本机 C++ 方法的 C++/CLI 库。我已经阅读了许多线程,指出您不应该混合托管和非托管代码。我找不到任何说明如何避免这些开关以及为什么会导致性能问题的信息。有人可以分享最佳实践。

【问题讨论】:

    标签: c++-cli


    【解决方案1】:

    使用 C++/CLI 的唯一原因是它支持混合托管代码和本机代码。如果一切都是托管的,则使用 C# 或 VB,如果一切都是本机的,则使用 C 或 C++。或者你喜欢的任何语言。显然避免混合是荒谬的。

    从托管到非托管会有少量开销。 C++/CLI 编译器会自动生成一些将“cookie”推送到堆栈上的机器代码,旨在防止垃圾收集器误入非托管堆栈帧并将该帧上的指针错误解释为托管对象引用。花费大约 7 纳秒,不分上下。

    【讨论】:

    • 特别注意:C++ 互操作比 p/invoke 便宜得多。当满足两个条件时,C++/CLI 将使用 C++ 互操作:您正在构建一个混合模式程序集(没有 /clr:pure)并且您正在使用普通 C++ 原型(通常来自本机头文件)声明函数,而不是 p/invoke DllImport 属性。
    猜你喜欢
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    相关资源
    最近更新 更多