性能 - 链接 C 尖锐和C++如何影响性能

Performance - How does linking C-sharp and C++ effect on Performance?

本文关键字:性能 何影响 影响 链接 C++      更新时间:2023-10-16

我正要开始我的新项目。我一直在使用C++(与Qt(和C#一起工作。所以我对这两种语言都非常熟悉。

我一直将它们分开使用,C#用于Windows,C++用于跨平台应用程序。但这次我想做一些不同的事情。我想将它们链接起来并一起使用。

我将使用 C# 进行 GUI 开发和后端C++。

所以现在,我只想知道这将如何影响我的应用程序的性能?

此致敬意萨玛斯·萨克塞纳。

互操作层的性能足够好,不会改变整体性能——这取决于你写代码的程度,你是否执行无用的复制,在你应该使用 StringBuilder 时在循环中连接字符串,等等。

尽管如此,p/invoke 和 COM 互操作的成本仍不为零,因此您希望避免使用聊天接口(例如,互操作调用应用整个数组填充缓冲区,而不是强制您为每个项目进行 p/invoke 调用(。

最终的互操作方法,C++/CLI"It Just Works",与纯 C# 相比,实际上可能会产生负成本。 这是因为它是 .NET 运行时在内部使用的方法(只要 mscorlib.exe 中的元数据具有 internalcall 标志(,如果向项目添加 C++/CLI 代码在 .NET 本身中节省的托管/本机转换比添加的更多,它将节省时间。

如果你使用Microsoft的"Dot Net"口味的C++,你会没事的。 性能通常与用 C# 编写所有内容或用 C++ 编写所有内容时一样好。 这是因为两种语言都将在"托管"模式下运行,并且它们将共享相同的运行时。 (点网运行时。

但是,如果要将托管 C# 与旧的常规(非托管/本机(C++一起使用,则由于在两者之间发出调用时需要完成的所有托管到本机和本机到托管的转换,以及这意味着的所有数据封送,您将有一定的性能损失。

谷歌搜索"pinvoke",看看人们为了从C#调用C++而必须经历的痛苦。 尽管如此,"pinvoke"的存在还是很酷的,它使事情变得相对容易。