4

我需要经常将数据从 C++ 传递到 C#。它应该尽可能快,因为我正在编写超低延迟交易应用程序。

我有纯C++项目(稍后会移植到Linux)。我需要将数据从它传递到我的 C# 项目。我总是需要传递相同的结构(如果这很重要)。

结构如下: Ticker = "MSFT" Price = "30" Volume = "10" Side = "Buy"

我想有两种选择:

  • 编写 C++-CLI 包装器,它将 UnmanagedMemoryStream 从 C++ 传递到 C#
  • 使用内存映射文件

会是什么:

  • 快点
  • 更容易实施
  • 更容易移植到 Linux 吗?
4

2 回答 2

2

Mono 根本不支持使用混合模式 C++/CLI 程序集(请参阅此处)。Mono 仅支持纯 CLR C++ 程序集。因此,如果您计划移植到 Linux,您应该使用
其他可能性,例如内存映射文件,或者 Matthew 建议使用 P/Invoke(Mono 支持,尽管它需要一些额外的工作)。

于 2013-02-16T22:06:35.073 回答
1

内存映射文件既快速又相对容易使用。我使用它们将大量 ECG 数据从 C# 应用程序传输到 C++ 应用程序。我还使用它们来传输较小的内存块(例如结构)。它与进程间数据传输的速度差不多。(您可能需要使用信号量等同步机制来控制从每一端读取/写入数据。)

但是,我不知道它们是否容易移植到 Linux - 但我知道 Linux 支持某种 MMF,所以我打赌它不会太难。但我不能肯定地说。

注意:如果您想将数据传输到在进程内运行的 DLL 中的 C++ 函数,那是完全不同的事情,您可以使用 P/Invoke 来执行此操作。使用 P/Invoke 将比使用 MMF 快得多(假设数据可以由编组器固定并且不需要复制)。一般来说,使用 P/Invoke,您最终可以只传递一个指向 C++ 函数的指针。

于 2013-02-16T20:34:24.237 回答