Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从c++;到c#的延迟最低?(没有编组吗?) 目前将结构从C++传递到C语言,我在两边(C++和C语言)声明它,并使用委托。描述了这种方法。在我看来,对于低延迟应用程序,它可能不合适,因为封送/解封占用CPU/内存,并且在结构大小足够大、请求频率足够高以及延迟要求足够高时,可能会影响性能 对于这样的低延迟情况,最好不要分配额外的内存,而是直接用C++内存工作。我发现有一个项目使用了System.IO.UnmanagedMemoryStream和System.IO.BinaryReader,然后可以通过以下方式读取某些字段: reader = new System.IO.BinaryReader(stream); stream.Position = 8; return reader.ReadInt32(); 但是我找不到完整的例子(在C语言中如何有 unMaultEngestyFixs,它指向C++中的一些结构或数组结构?)我不确定这是最好的方法,但它可能是这样。对于C++从C到C的结构的“低延时”转换,你有什么建议?你能举个例子吗_C#_C++_Latency - Fatal编程技术网

如何从c++;到c#的延迟最低?(没有编组吗?) 目前将结构从C++传递到C语言,我在两边(C++和C语言)声明它,并使用委托。描述了这种方法。在我看来,对于低延迟应用程序,它可能不合适,因为封送/解封占用CPU/内存,并且在结构大小足够大、请求频率足够高以及延迟要求足够高时,可能会影响性能 对于这样的低延迟情况,最好不要分配额外的内存,而是直接用C++内存工作。我发现有一个项目使用了System.IO.UnmanagedMemoryStream和System.IO.BinaryReader,然后可以通过以下方式读取某些字段: reader = new System.IO.BinaryReader(stream); stream.Position = 8; return reader.ReadInt32(); 但是我找不到完整的例子(在C语言中如何有 unMaultEngestyFixs,它指向C++中的一些结构或数组结构?)我不确定这是最好的方法,但它可能是这样。对于C++从C到C的结构的“低延时”转换,你有什么建议?你能举个例子吗

如何从c++;到c#的延迟最低?(没有编组吗?) 目前将结构从C++传递到C语言,我在两边(C++和C语言)声明它,并使用委托。描述了这种方法。在我看来,对于低延迟应用程序,它可能不合适,因为封送/解封占用CPU/内存,并且在结构大小足够大、请求频率足够高以及延迟要求足够高时,可能会影响性能 对于这样的低延迟情况,最好不要分配额外的内存,而是直接用C++内存工作。我发现有一个项目使用了System.IO.UnmanagedMemoryStream和System.IO.BinaryReader,然后可以通过以下方式读取某些字段: reader = new System.IO.BinaryReader(stream); stream.Position = 8; return reader.ReadInt32(); 但是我找不到完整的例子(在C语言中如何有 unMaultEngestyFixs,它指向C++中的一些结构或数组结构?)我不确定这是最好的方法,但它可能是这样。对于C++从C到C的结构的“低延时”转换,你有什么建议?你能举个例子吗,c#,c++,latency,C#,C++,Latency,我不关心可移植性、可维护性等。只有延迟才是重要的。这是一个临时解决方案,直到我摆脱C++,导入C++函数并使它返回一个结构作为参数。在C#中,使用IntPtr类型,并使用 DllImport("somedll.dll") public static extern void SomeFunction(out IntPtr someStructParameterOutput); 然后: IntPtr yourStruct; SomeFunction(out yourStruct); Stream

我不关心可移植性、可维护性等。只有延迟才是重要的。这是一个临时解决方案,直到我摆脱C++,

导入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);

为什么不在函数结果中返回“IntPtr”?这会比使用codeproject中描述的方法更快吗?@javapowered您也可以返回它。我不知道哪种方法更快,你得试试看。您也不需要内存流。您可以使用一个不安全的代码块,并将其作为一个指针,它具有一个内存偏移量,就像您在CasuMe中所传递的一样,IntPtr把它传递给C指向某个C++结构。我如何阅读此结构的某些成员?我在c中没有这个结构的副本,我发现我可以使用
Marshal.ReadInt64
Marshal
类中的类似方法。我认为这是推荐的做事方式,对吗?@javapowered是的,那会管用的。有几种不同的方法可以做到这一点。。您也可以在C中定义结构,并在C中向我相信的结构指针投射一个指针。还有Marshal.structureToInter和Marshal.PointerToStructure,但我相信这些方法会将内存复制到托管内存中。我的建议是通读MS关于封送不同类型的文档。。如果你没有花时间去阅读它,这真的很有帮助。