我使用的是内存映射文件。 100 GB的数据。当我在该文件上调用CreateViewStream时,需要30分钟才能创建它,这似乎是由于内存映射文件的大小所致,但是为什么要花这么长时间呢?
是否会将整个文件复制到托管内存中?

当我使用文件流写入文件并在不重新启动的情况下访问它时,将花费更长的时间。 (奇怪的是)

最佳答案

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

    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);
    }
f:\test.bin是我出于此测试目的而生成的100GB零填充文件。我能够创建MemoryMappedFile,然后运行CreateViewStream并在3.7s内从中读取100,000个字节。

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

关于c# - 具有非常慢的CreateViewStream的MemoryMappedFile,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32087790/

10-13 06:56