2

目前要将结构从 c++ 传递到 c#,我在两侧(c++ 和 c#)都声明它并使用委托。此处描述了此方法。在我看来,对于低延迟的应用程序,它可能不适合,因为编组/解组会消耗 CPU/内存,并且当结构大小足够大、请求频率足够高且延迟要求足够高时可能会影响性能。

对于这种低延迟的场景,最好不要分配额外的内存,而是直接在 c# 中使用 c++ 内存。我发现一个项目使用System.IO.UnmanagedMemoryStreamSystem.IO.BinaryReader为此,然后可以通过这种方式读取某些字段:

reader = new System.IO.BinaryReader(stream);
stream.Position = 8;
return reader.ReadInt32();

但是我找不到完整的示例(如何UnmanagedMemoryStream在 c# 中指向 c++ 中的某些结构或结构数组?)我不确定这是最好的方法,但可能是这样。对于从 c++ 到 c# 的结构的“低延迟”传输,您有什么建议?你能举个例子吗?

我不关心可移植性、可维护性等。只有延迟很重要。在我摆脱 c# 之前,这是临时解决方案。

4

1 回答 1

1

导入您的 C++ 函数并让它返回一个结构作为参数。在 C# 中,使用 IntPtr 类型,然后使用

DllImport("somedll.dll")
public static extern void SomeFunction(out IntPtr someStructParameterOutput);

接着:

IntPtr yourStruct;
SomeFunction(out yourStruct);
Stream s = new UnmanagedMemoryStream((byte*)yourStruct.ToPointer(), length);
于 2013-06-20T20:55:51.167 回答