如何实现共享只读访问内存映射文件

3

在使用内存映射文件快速读取.net中的文件流时,我遇到了IOException的问题,因为两个进程正在读取同一个文件而导致文件锁定。

有几种工厂方法可以生成内存映射文件,如何允许共享readonly访问?


内存映射文件可能不是可用的最快选项。使用“SequentialScan”进行流式传输是读取文件的最快方法。 - usr
我个人所使用的是将其传递给二进制格式的解析器,该解析器不一定读取整个文件,因此没有查找开销似乎会更快。我尚未尝试顺序扫描,但对于我的目的,与普通的只读文件流相比,内存映射文件的速度要快几个数量级。 - jbtule
1个回答

8

以下是创建只读内存映射文件到路径的简化工厂方法:

public static MemoryMappedFile MemFile(string path)
{
     return MemoryMappedFile.CreateFromFile(
               //include a readonly shared stream
               File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read),
               //not mapping to a name
               null,
               //use the file's actual size
               0L, 
               //read only access
               MemoryMappedFileAccess.Read, 
               //not configuring security
               null,
               //adjust as needed
               HandleInheritability.None,
               //close the previously passed in stream when done
               false);

}

创建和使用完整流:
using (var memFile = MemFile(path))
using (var stream = memFile.CreateViewStream(0L, 0L, MemoryMappedFileAccess.Read))
{
     //do stuff with your stream
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接