gpt4 book ai didi

c# - 如何从 .NET 中的内存映射文件中快速读取字节?

转载 作者:IT王子 更新时间:2023-10-29 04:33:55 27 4
gpt4 key购买 nike

在某些情况下 MemoryMappedViewAccessor class 只是没有削减它以有效地读取字节;我们得到的最好的是通用的 ReadArray<byte>它是所有结构的路径,并且在您只需要字节时涉及几个不必要的步骤。

可以使用 MemoryMappedViewStream , 但因为它是基于 Stream你需要先寻找到正确的位置,然后读取操作本身有更多不必要的步骤。

是否有一种快速、高性能的方法来从 .NET 中的内存映射文件中读取字节数组,假设它应该只是要读取的地址空间的特定区域?

最佳答案

这个解决方案需要不安全的代码(用/unsafe开关编译),但是直接抓取一个指向内存的指针;然后可以使用 Marshal.Copy。这比 .NET 框架提供的方法快得多。

    // assumes part of a class where _view is a MemoryMappedViewAccessor object

public unsafe byte[] ReadBytes(int offset, int num)
{
byte[] arr = new byte[num];
byte *ptr = (byte*)0;
this._view.SafeMemoryMappedViewHandle.AcquirePointer(ref ptr);
Marshal.Copy(IntPtr.Add(new IntPtr(ptr), offset), arr, 0, num);
this._view.SafeMemoryMappedViewHandle.ReleasePointer();
return arr;
}

public unsafe void WriteBytes(int offset, byte[] data)
{
byte* ptr = (byte*)0;
this._view.SafeMemoryMappedViewHandle.AcquirePointer(ref ptr);
Marshal.Copy(data, 0, IntPtr.Add(new IntPtr(ptr), offset), data.Length);
this._view.SafeMemoryMappedViewHandle.ReleasePointer();
}

关于c# - 如何从 .NET 中的内存映射文件中快速读取字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7956167/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com