Desempenho de C # ReadAllBytes

Para testar o desempenho de File.ReadAllBytes , criei um arquivo de 32 MB contendo dados binários e testei uma série de tamanhos de buffer de até 40 KB. Neste caso, ReadAllBytes foi quase 40x mais rápido do que qualquer um dos buffers que foram implementados.

A única razão para não usar ReadAllBytes é se o consumo de memória for um problema, caso em que você deseja ler o arquivo em blocos armazenados em buffer.

Resultados:

Top 10 Times

Length of file: 32068000 B

buffer size elapsed time

32068000 B 16
37608 B 599
24008 B 606
8808 B 607
34408 B 609
20808 B 612
22408 B 612
33608 B 612
30408 B 613
39208 B 613

Código de leitura em buffer:

static byte[] readBytes(string file_name, int buffer)
{
List<byte[]> dirtybytes = new List<byte[]>();

using (BinaryReader b = new BinaryReader(File.Open(file_name, FileMode.Open, FileAccess.Read)))
{
//hold position counters
int pos = 0;
int length = (int)b.BaseStream.Length;

while (pos < length)
{
//read the bytes
dirtybytes
.Add(b.ReadBytes(buffer));

//increment the position
pos
+= buffer;
}
}
//get the complete byte array
return dirtybytes.SelectMany(x => x).ToArray();
}