我的程序由3个组件组成
1) C#前端
2) C++/CLI包装器
3) C++后端
C# FE包含一个通过从HttpWebRequest类获取Stream与web进行通信的方法。此方法通过包装器传递给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[],因为我控制所有阶段的内存分配。
这个是可能的吗?
它应该提高性能吗?
发布于 2013-12-19 17:35:02
不能将任意缓冲区转换为array<Byte>,但可以固定array<Byte>并获取指向其第一个元素的非托管指针,该指针在对象解除固定之前一直有效。
如果您想在C#中执行此操作,请参见C++/CLI的pin_ptr<>类和GCHandle类。
https://stackoverflow.com/questions/20661292
复制相似问题