【问题标题】:Using a C/C++ data structure in a C# program在 C# 程序中使用 C/C++ 数据结构
【发布时间】:2011-03-19 01:46:57
【问题描述】:

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

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

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

【问题讨论】:

  • 我怀疑你会比框架中包含的内容更快地实现任何目标。当您在托管和非托管代码和值之间进行封送处理时,您会遇到巨大的性能损失。
  • @Daniel A. White: 是的,这就是我担心的问题,尤其是因为 map 方法被调用了 lot 次。这种表现是不可避免的吗?如果我在 C# 中使用 unsafe 关键字会怎样?
  • 丹尼尔是正确的。您最好将集合移植到 C#。您的 C# 实现可以使用unsafe,但几乎可以肯定不需要。
  • 是的,我想我会向 C 端推送更多代码,并尽量减少 C# 端必须进行的调用。

标签: c# c++ c dll interop


【解决方案1】:

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

我建议您编写一个 C 库(只要方法是外部 C,就可以使用 C++ 结构实现)并使用 P/Invoke 从 C# 代码调用它-once!-。这个库可以在你的高性能数据结构上聚会,并向 C# 端返回一些有用的信息。

【讨论】:

  • 这是一个有趣的想法。我可以将更多的 C# 代码推入 C 部分,并最大限度地减少我在它们之间进行的调用。谢谢!
【解决方案2】:

你可以使用管道。

【讨论】:

    猜你喜欢
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2010-09-27
    • 2013-04-27
    • 2012-02-13
    • 1970-01-01
    相关资源
    最近更新 更多