0
我的程序由3个部件
1)C#前端
2)的C#方法C++/CLI包装器
3)C++后端呼叫接受字节[]与非托管IntPtr的
C#的FE包含了方法,通过从HttpWebRequest
类获得Stream
与网络进行通信。这个方法通过包装器传递给C++后端,当它有新的字节发送时,它会调用它。
C#
void WriteBytes(IntPtr pBody, int cbBody); // Marshal.Copy'es the data from
IntPtr to managed byte[], then calls Stream.WriteBytes(byte[], ...)
C++/CLI
void WriteBytes(System::IntPtr pBody, int cbBody); // uses
Marshal::GetFunctionPointerForDelegate
C++
void WriteBytes(const BYTE* pBody, size_t cbBody); // calls function pointer
received from the wrapper
我想优化这种不从非托管BYTE *复制字节来管理字节[],如I控制各阶段的存储器分配。
这可能吗?
它应该提高性能吗?
任何人......?这非常重要。 – Itsik
是的,避免复制可以提高性能。如果您控制内存分配,请使用托管字节[]开始,并将固定数组的指针传递给本机代码。 –
另外,C++ CLI消除了对GetFunctionPointerForDelegate –