使用C/C++;C#程序中的数据结构

使用C/C++;C#程序中的数据结构,c#,c++,c,dll,interop,C#,C++,C,Dll,Interop,我有一个超高性能的C/C++数据结构(),我想在我的C#程序中访问和使用它 想象C/C++数据结构有一个公共API(get,add,delete,等等)如何在C#中以高性能的方式多次调用这些方法? p.S.在你批评我使用“C/C++”这个短语之前 如果性能对您很重要,那么您应该避免“多次”跨越托管/非托管边界。C和C++都是高性能语言,但互操作代价不高。 我建议你编写一个C库(可以用C++构造实现,只要方法是ExtC),并从C代码中调用它一次!使用P/Invoke。此库可以共享您的高性能数据结构

我有一个超高性能的C/C++数据结构(),我想在我的C#程序中访问和使用它

想象C/C++数据结构有一个公共API(
get
add
delete
,等等)
如何在C#中以高性能的方式多次调用这些方法?


p.S.在你批评我使用“C/C++”这个短语之前<在我看来,C/C++与C语言和C++编程语言都有区别。我不知道C++,但它是C的扩展,使用C++的一些构造,可以用C++编译器编译。p> 如果性能对您很重要,那么您应该避免“多次”跨越托管/非托管边界。C和C++都是高性能语言,但互操作代价不高。

我建议你编写一个C库(可以用C++构造实现,只要方法是ExtC),并从C代码中调用它一次!使用P/Invoke。此库可以共享您的高性能数据结构,并向C端返回一些有用的信息。

您可以使用管道。

我怀疑您能否比框架中包含的更快实现任何功能。在托管和非托管代码和值之间封送时,您将遇到巨大的性能损失。
@Daniel a.White:
是的,这正是我担心的,特别是因为map方法被调用了很多次。这样的表现是不可避免的吗?如果我在C#中使用
unsafe
关键字会怎么样?Daniel是正确的。您最好将集合移植到C#。你的C#实现可以使用
不安全的
,但几乎肯定不需要。是的,我想我会把更多的代码推到C端,尽量减少C#端必须进行的调用。这是一个有趣的想法。我可以将更多的C#代码放入C部分,并尽量减少在它们之间进行的调用。谢谢