System.IO.File.ReadAllBytes for file larger than 2

2019-02-28 21:32发布

问题:

I have a large file that I need to copy to memory for further processing. The software works fine for files smaller than 2GB, but as soon as they pass this limit I get an exception that ReadAllBytes only supports files smaller than 2GB.

byte[] buffer = System.IO.File.ReadAllBytes(file); // exception if file > 2GB

What is the fastest way to copy a file larger than 2GB to memory?

The process is already 64bit and the flag gcAllowVeryLargeObjects is already set.

回答1:

I doubt you can do anything faster than a memory mapped file http://msdn.microsoft.com/en-us/library/system.io.memorymappedfiles.memorymappedfile(v=vs.110).aspx.

using ( var file = MemoryMappedFile.CreateFromFile( "F:\\VeryLargeFile.data" ) )
{
}

You can then use CreateViewAccessor or CreateViewStream to manipulate the data.