当前位置:编程学习 > C#/ASP.NET >>

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

现在正在编和硬件有交互的程序,我为一个设备分配了12.5M的非托管内存,要将内存中的数据网络发送,发送函数只支持不byte数组,所以先将内存中数据复制到数组。但这过程需要300毫秒,是正常速度的十倍左右,影响了发送的速度。请问什么原因可能导致复制速度过慢。 --------------------编程问答-------------------- 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();
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,