本文共 754 字,大约阅读时间需要 2 分钟。
//输入buye[],返回IntPtrIntPtr ArrToPtr(byte[] array){ return System.Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(array, 0);}
不使用Marshal创建新的堆,节省内存开销,也避免忘记释放导致的问题
看到函数开头的unsafe
就自个儿理解吧
使用Marshal对数据进行拷贝,该操作速度较慢并且会引入新空间的开辟
IntPtr intPtr = GetBuff();byte[] b = new byte[length];Marshal.Copy(intPtr, b, 0, length);
该操作不会开辟新的空间,速度极快,但必须在unsafe模块下使用
IntPtr pRet = GetBuff();byte* memBytePtr = (byte*)pRet.ToPointer();
memBytePtr 指针指向的是pRet数据空间的起始位置
以下模块必须在unsafe代码模块中使用:
void PtrToStream(IntPtr pRet){ byte* memBytePtr = (byte*)pRet.ToPointer(); UnmanagedMemoryStream readStream = new UnmanagedMemoryStream(memBytePtr, Length, Length, FileAccess.Read);}
转载地址:http://cloen.baihongyu.com/