目前要将结构从 c++ 传递到 c#,我在两侧(c++ 和 c#)都声明它并使用委托。此处描述了此方法。在我看来,对于低延迟的应用程序,它可能不适合,因为编组/解组会消耗 CPU/内存,并且当结构大小足够大、请求频率足够高且延迟要求足够高时可能会影响性能。
对于这种低延迟的场景,最好不要分配额外的内存,而是直接在 c# 中使用 c++ 内存。我发现一个项目使用System.IO.UnmanagedMemoryStream
并System.IO.BinaryReader
为此,然后可以通过这种方式读取某些字段:
reader = new System.IO.BinaryReader(stream);
stream.Position = 8;
return reader.ReadInt32();
但是我找不到完整的示例(如何UnmanagedMemoryStream
在 c# 中指向 c++ 中的某些结构或结构数组?)我不确定这是最好的方法,但可能是这样。对于从 c++ 到 c# 的结构的“低延迟”传输,您有什么建议?你能举个例子吗?
我不关心可移植性、可维护性等。只有延迟很重要。在我摆脱 c# 之前,这是临时解决方案。