C# BinaryReader заметно медленнее. Альтернатива?
Для моего проекта мне нужно написать UInt16, UInt32, Bytes и Strings из файла. Я начал с простого класса, который я написал так:
public FileReader(string path) //constructor
{
if (!System.IO.File.Exists(path))
throw new Exception("FileReader::File not found.");
m_byteFile = System.IO.File.ReadAllBytes(path);
m_readPos = 0;
}
public UInt16 getU16() // basic function for reading
{
if (m_readPos + 1 >= m_byteFile.Length)
return 0;
UInt16 ret = (UInt16)((m_byteFile[m_readPos + 0])
+ (m_byteFile[m_readPos + 1] << 8));
m_readPos += 2;
return ret;
}
Я подумал, что, возможно, будет лучше использовать уже существующий BinaryReader, и поэтому я попробовал его, но заметил, что он медленнее, чем мой подход. Может кто-нибудь объяснить, почему это так, и если есть еще один уже существующий класс, который я мог бы использовать для загрузки файла и чтения из него?
~ Adura
1 ответ
У вас есть все данные заранее в массиве в памяти, тогда как BinaryReader
потоковые байты по одному из источника, который, я думаю, является файлом на диске. Я думаю, вы могли бы ускорить его, передав поток, который читает из массива в памяти:
Stream stream = new MemoryStream(byteArray);
//Pass the stream to BinaryReader
Обратите внимание, что при таком подходе вам нужно заполнить весь файл в памяти сразу, но я думаю, это нормально для вас.