【发布时间】:2011-04-29 18:46:15
【问题描述】:
我有一个调用许多本机 C++ 方法的 C++/CLI 库。我已经阅读了许多线程,指出您不应该混合托管和非托管代码。我找不到任何说明如何避免这些开关以及为什么会导致性能问题的信息。有人可以分享最佳实践。
【问题讨论】:
标签: c++-cli
我有一个调用许多本机 C++ 方法的 C++/CLI 库。我已经阅读了许多线程,指出您不应该混合托管和非托管代码。我找不到任何说明如何避免这些开关以及为什么会导致性能问题的信息。有人可以分享最佳实践。
【问题讨论】:
标签: c++-cli
使用 C++/CLI 的唯一原因是它支持混合托管代码和本机代码。如果一切都是托管的,则使用 C# 或 VB,如果一切都是本机的,则使用 C 或 C++。或者你喜欢的任何语言。显然避免混合是荒谬的。
从托管到非托管会有少量开销。 C++/CLI 编译器会自动生成一些将“cookie”推送到堆栈上的机器代码,旨在防止垃圾收集器误入非托管堆栈帧并将该帧上的指针错误解释为托管对象引用。花费大约 7 纳秒,不分上下。
【讨论】:
/clr:pure)并且您正在使用普通 C++ 原型(通常来自本机头文件)声明函数,而不是 p/invoke DllImport 属性。