我使用的是内存映射文件。 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/