2010-07-21 80 views
2

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

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

P.S.在批评我使用短语“C/C++”之前......
在我看来,C/C++不同于C C++编程语言。我不知道C++,而是C的扩展,它使用了一些C++构造,并且可以用C++编译器编译!

+4

我怀疑你会比框架中包含的任何东西都快。当您在托管和非托管代码和值之间编组时,您会遇到巨大的性能下降。 – 2010-07-21 15:27:07

+0

'@Daniel A. White:'是的,这就是我所担心的,特别是因为地图方法被称为_lots_次。这种表现是不可避免的吗?如果我在C#中使用'unsafe'关键字怎么办? – 2010-07-21 15:29:02

+0

丹尼尔是正确的。你最好把它移植到C#上。你的C#实现*可能会使用'unsafe',但几乎肯定不需要。 – 2010-07-21 15:37:27

回答

5

如果性能对你很重要,那么你应该避免“很多次”越过托管/非托管边界。 C#和C++都可以是高性能语言,但互操作性能成本并不令人愉快。

我建议你编写一个C库(只要方法是extern C,可以用C++构造实现),并使用P/Invoke从C#代码调用它。这个库可以派发你的高性能数据结构,并返回一些有用的信息到C#端。

+1

这是一个有趣的想法。我可以将更多的C#代码推入C部分,并最小化我在它们之间进行的调用。谢谢! – 2010-07-21 15:34:02