C# - 如何将 IntPtr 缓冲区数据保存到文件(最快的方法)?

2024-05-13

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

private void callback(IntPtr buffer, int length)
{
    byte[] bytes = new byte[length];
    Marshal.Copy(buffer, bytes, 0, length);
    FileStream file = new FileStream(filename, FileMode.Create, FileAccess.Write);
    file.Write(bytes, 0, length);
    file.Close();
}

我想要的是将这些数据存储到文件中并将其丢弃。据我了解,非托管代码中有一个缓冲区,我的代码中有第二个缓冲区。我不想直接复制周围的数据:

// bad:     (unmanaged) buffer -> (managed) bytes -> file
// awesome: (unmanaged) buffer ->                    file

对于我的任务,我需要以最快的方式将数据存储到文件中。


留在 .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 **/}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - 如何将 IntPtr 缓冲区数据保存到文件(最快的方法)? 的相关文章

随机推荐