C#复制非托管内存的速度过慢

clcao 2008-07-12 10:34:06
现在正在编和硬件有交互的程序,我为一个设备分配了12.5M的非托管内存,要将内存中的数据网络发送,发送函数只支持不byte数组,所以先将内存中数据复制到数组。但这过程需要300毫秒,是正常速度的十倍左右,影响了发送的速度。请问什么原因可能导致复制速度过慢。
...全文
155 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
gomoku 2008-07-13
  • 打赏
  • 举报
回复
1、可以直接用 byte[] buffer = new byte[ 12.5M ]。发送的时候直接用buffer,就不用拷贝了。
2、同硬件交互的时候把buffer钉住就可以了(安全起见,虽然目前12.5M数组分配在大对象堆中,并不会被移动):
3、P/Invoke的时候,CLR会帮你钉住调用参数。如果硬件需要长期使用12.5M内存,可以手工用GCHandle来钉住托管内存:

GCHandle gch = GCHandle.Alloc(buffer, GCHandleType.Pinned);
IntPtr pointer = gch.AddrOfPinnedObject();
//......
gch.Free();

110,017

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧