mag*_*gol 4 c# com pinvoke interop c++-cli
从 C# 代码调用 C++ 函数时,哪种方式可提供最佳性能?
我想COM 互操作提供了最好的性能,而且当你在列表中下降时,性能会迅速下降。还是我完全错了?
背景
我们有一个用 C++/MFC 编写的旧中央服务器应用程序。今天,其他应用程序没有简单的方法与这个应用程序通信,我们想为它开发一个 API。
在今天的应用程序中,性能很重要,我们希望即使在使用新 API 的应用程序中也有相当高的性能。
将使用 API 的应用程序将使用 C++、C# 和 PowerShell 编写。可能,必须为每种语言制作某种 Facade,但我们不希望通过 API 中的更改来保持不同的 Facade 更新工作太多。最好的事情是如果 Facades 在编译时自动生成。
编辑
对于函数,我指的是在内部数据库中获取状态、获取和设置信息(可以是长文本字符串)等的函数
见这对微软自己多一点的信息。
除此之外; 似乎P/Invoke 是最快的(例如见这个)。根据经验,我可以说 P/Invoke非常快(每次调用 75 ?s,而仅 C# 为 1.4 ?s),但这当然不是普遍有效的,YMMV。
此外,虽然 P/Invoke 非常快,但它非常不安全,而且通常只是*** 中的一个痛苦。COM Interop 也是如此,因为两者都缺乏 C# 以及在某种程度上 C++/CLI 提供的所有语法糖和简单性。它们还会导致更冗长的代码。
这就是 C++ CLI 派上用场的地方。它使编写互操作代码的方式比使用 P/Invoke 或 COM 更容易、更安全。它也不那么冗长。
然而更重要的是P/Invoke 不适用于 C++。它只适用于 C,所以你的 C++ 代码至少需要一个薄的包装层(例如extern "C",没有类等),而 C++/CLI 可以与 C++ 和所有好的东西一起使用std::string。
结论:重要的是不要选择在运行时最快的,而是在开发时间方面:您是否想花费 8 多个小时来寻找由不仔细编写的 P/Invoke 引入的令人讨厌的内存泄漏,只是为了获得额外的+10us?
选择最易读和最安全的东西——而不是比另一个快一点的东西。优化可以而且应该在最后完成。
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |