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

Обратите внимание, что при таком подходе вам нужно заполнить весь файл в памяти сразу, но я думаю, это нормально для вас.

Другие вопросы по тегам