C#-如何将IntPtr缓冲区数据保存到文件(最快的方式)?
我使用这段代码将IntPtr缓冲区中的字节以非托管代码的形式保存到文件中。这是一个简单的回调函数:C#-如何将IntPtr缓冲区数据保存到文件(最快的方式)?,c#,winapi,C#,Winapi,我使用这段代码将IntPtr缓冲区中的字节以非托管代码的形式保存到文件中。这是一个简单的回调函数: private void回调(IntPtr buffer,int length) { 字节[]字节=新字节[长度]; Marshal.Copy(缓冲区,字节,0,长度); FileStream file=newfilestream(文件名,FileMode.Create,FileAccess.Write); file.Write(字节,0,长度); file.Close(); } 我想要的是将这
private void回调(IntPtr buffer,int length)
{
字节[]字节=新字节[长度];
Marshal.Copy(缓冲区,字节,0,长度);
FileStream file=newfilestream(文件名,FileMode.Create,FileAccess.Write);
file.Write(字节,0,长度);
file.Close();
}
我想要的是将这些数据存储到文件中并将其丢弃。据我所知,非托管代码中有一个缓冲区,我的代码中有第二个缓冲区。我不想复制周围的数据,我想直接复制:
//坏:(非托管)缓冲区->(托管)字节->文件
//awesome:(非托管)缓冲区->文件
对于我的任务,我需要最快的方式将数据存储到文件中。嗯,出于某种原因,它被称为“托管”:
不过,您可以使用以下方式进行声明:
private void callback(IntPtr buffer, int length)
{
FileStream file = new FileStream(filename, FileMode.Create, FileAccess.Write);
int written;
WriteFile(file.Handle, buffer, length, out written, IntPtr.Zero);
file.Close();
}
[DllImport("kernel32.dll")]
private static extern bool WriteFile(IntPtr hFile, IntPtr lpBuffer, int NumberOfBytesToWrite, out int lpNumberOfBytesWritten, IntPtr lpOverlapped);
保持在.NET框架内可能比使用对内核DLL的调用更好 我将使用:
private void callback(IntPtr buffer, int length, String filename)
{
try
{
FileStream file = new FileStream(filename, FileMode.Create, FileAccess.Write);
UnmanagedMemoryStream ustream = new UnmanagedMemoryStream((byte*)buffer, length);
ustream.CopyTo(file);
ustream.Close();
file.Close();
}
catch{/** To do: catch code **/}
}