我正在努力解决将DLL作为ref byte
复制的大数据复制到文件的最佳方法。
因为它是一个视频流(或数百个),所以我不太习惯在循环中使用Marhal.Copy
/ WriteByte
等等。但更直接的东西。
我对ref byte
非常感兴趣,遗憾的是没有太多关于它的事情
无论如何,我正在考虑P / Invoke WriteFile
,但它得到IntPtr
我可以从ref byte
得到的最接近byte*
(使用fixed
) 。
现在,我将拥有几百个这样的流,每个流可以达到~2Mbps
所以在底线 - 我正在寻找一种有效的方法将ref byte
块复制到一个文件中(当然具有给定的数组大小)。
答案 0 :(得分:0)
如果有人会感兴趣,并且感谢史密斯先生,我首先将给定的DllImport从ref byte
声明更改为IntPtr
。
然后我导入WriteFile
:
[DllImport("kernel32.dll")]
private static extern bool WriteFile(IntPtr hFile, IntPtr lpBuffer, int NumberOfBytesToWrite, out int lpNumberOfBytesWritten, IntPtr lpOverlapped);
并按如下方式使用:
//somewhere in class:
tmpFileStream = new FileStream("tmp.bin", FileMode.Create, FileAccess.Write);
public void AddBuffer(IntPtr buffer, int size)
{
int written;
WriteFile(tmpFileStream.SafeFileHandle.DangerousGetHandle(), buffer, size, out written, IntPtr.Zero);
}