Por curiosidade, abri o .NET Reflector com o .NET Framework 4.0 e comecei a explorar as classes que ele disponibiliza e, logo percebi um novo namespace: System.IO.MemoryMappedFiles. Dentro deste namespace, entre as poucas classes, temos a classe MemoryMappedFile. É importante dizer que é uma versão CTP, sem a garantia de que isso prevalecerá na versão final.
A finalidade dela é mapear um espaço da memória para o conteúdo de um determinado arquivo (ou algum outro recurso), criando um objeto que servirá de “ponte” entre a aplicação e o arquivo físico, criandos “views” deste arquivo e, como principal benefício, permitirá acessar “seções” do arquivo, sem carregá-lo completamente para a memória. Abaixo um exemplo simples que faz a utilização desta classe:
using System.IO;
using System.IO.MemoryMappedFiles
using (MemoryMappedFile mmf =
MemoryMappedFile.CreateFromFile(new FileStream(“C:Teste.txt”, FileMode.Open)))
{
byte[] buffer = new byte[5];
mmf.CreateViewStream(120, 5).Read(buffer, 0, 5);
Console.WriteLine(Encoding.Default.GetString(buffer));
}
O primeiro parametro do método CreateViewStream é a posição inicial dentro do arquivo e, o segundo, a quantidade de caracteres que voce quer extrair.