混合模式 C++CLI 性能注意事项 - 最佳实践

发布于 2024-09-28 22:58:14 字数 105 浏览 2 评论 0原文

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

I have a C++/CLI library that calls many native C++ methods. I have read many threads stating that you should not mix managed and unmanaged code. I couldnt find any that says how to avoid those switches and why it will cause a performance issue. Can someone share best practices.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

从﹋此江山别 2024-10-05 22:58:14

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

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

The only reason to use C++/CLI is for its support of mixing managed and native code. If everything is managed then use C# or VB, if everything is native then use C or C++. Or whatever language you prefer. Clearly avoiding mixing is nonsensical.

There is a small amount of overhead going from managed to unmanaged. The C++/CLI compiler auto-generates a bit of machine code that pushes a 'cookie' on the stack, designed to prevent the garbage collector from blundering into unmanaged stack frames and mis-interpreting pointers on that frame as managed object references. Costs about 7 nanoseconds, give or take.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文