C#-如何将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(); } 我想要的是将这

我使用这段代码将IntPtr缓冲区中的字节以非托管代码的形式保存到文件中。这是一个简单的回调函数:

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 **/}
}