MemoryMappedFile具有非常慢的CreateViewStream

Seb*_*ian 5 c# memory-mapped-files

我正在使用大约的内存映射文件.100 GB的数据.当我调用CreateViewStream该文件时,它需要30分钟来创建它,并且似乎是因为内存映射文件的大小,但是,为什么要花这么长时间呢?它是否将整个文件复制到托管内存中?

使用文件流编写文件并在不重新启动的情况下访问它需要更长的时间.(奇怪)

wil*_*ien 4

我无法复制这些问题。这是我用来测试的代码:

    static void Main(string[] args)
    {
        var sw = Stopwatch.StartNew();
        var mmf = MemoryMappedFile.CreateFromFile(@"f:\test.bin");
        var stream = mmf.CreateViewStream();
        for (int i = 0; i < 100000; i++)
        {
            stream.ReadByte();
        }
        Console.WriteLine(sw.Elapsed);
    }
Run Code Online (Sandbox Code Playgroud)

f:\test.bin是我为本测试目的生成的 100GB 零填充文件。我能够创建MemoryMappedFile,然后运行CreateViewStream并在 3.7 秒内从中读取 100,000 字节。

请提供展示您所描述的行为的示例代码,我很乐意将其拆开并看看发生了什么。