性能 – 如何连接C-sharp和C ++对性能的影响?

我即将开始我的新项目。 我一直在使用C + +(与Qt)和C#。 所以我非常熟悉这两种语言。

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

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

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

最好的问候,Samarth Saxena。

互操作层的性能足够好,它不会改变整体性能 – 这取决于你编写代码的方式,你是否使用无用的副本,当你使用StringBuilder时在一个循环中连接字符串,等等。

尽管如此,p / invoke和COM interop的开销并不是零,所以你要避免使用繁琐的接口(例如互操作调用应该用整个数组填充一个缓冲区,而不是强迫你为每个项目调用ap / invoke )。

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

如果你使用微软的C ++的“DotNet”风格,你会没事的。 如果你用C#编写所有东西,或者用C ++编写所有东西,性能一般都会好得多。 这是因为两种语言都将以“托管”模式运行,并且它们将共享相同的运行时。 (Dot Net运行时。)

但是,如果要使用托管的C#和旧的常规(非托管/本地)C ++,则由于托管到本机和本地到托管的所有转换都会受到一定的性能损失在两者之间进行调用时完成,而这意味着所有的数据编组。

谷歌“pinvoke”,看看有什么痛苦的人通过从C#调用C + +。 不过,“销售”存在是相当酷的,它使事情变得相对容易。