net Span和MemoryPool提升文件读取速度

public static byte[] ReadAndProcessBytesOptimized(string filePath)
{
    using (MemoryStream stream = new MemoryStream())
    {
        using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
        {
            byte[] buffer = ArrayPool<byte>.Shared.Rent(4096);
            int bytesRead;
            while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
            {
                Span<byte> span = new Span<byte>(buffer, 0, bytesRead);
                for (int i = 0; i < span.Length; i++)
                {
                    if (span[i] == 0x0A)
                    {
                        stream.WriteByte(span[i + 1]);
                    }
                }
            }
            ArrayPool<byte>.Shared.Return(buffer);
        }
        return stream.ToArray();
    }
}

在优化后的代码中,我们使用MemoryStream和FileStream结合ArrayPool<byte>来分块读取文件,减少内存占用。通过Span对每一块读取的数据进行高效处理,避免了不必要的内存分配。最后,将处理结果写入MemoryStream并返回。


作者:spike

分类: Net

创作时间:2025-04-04

更新时间:2025-04-07

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1