Производительность: использовать BinaryReader в MemoryStream для чтения байтового массива или для непосредственного чтения? - PullRequest
4 голосов
/ 12 июня 2010

Я хотел бы знать, может ли использование BinaryReader на MemoryStream, созданном из байтового массива (byte[]), значительно снизить производительность.

Есть двоичные данные, которые я хочу прочитать, иЯ получаю эти данные в виде массива байтов.В настоящее время я выбираю два подхода к чтению данных, и мне нужно соответственно реализовать много методов чтения.После каждого чтения мне нужна позиция сразу после чтения данных, и поэтому я рассматриваю возможность использования BinaryReader.Первый, не BinaryReader подход:

object Read(byte[] data, ref int offset);

Второй подход:

object Read(BinaryReader reader);

Такие Read() методы будут вызываться очень часто, последовательно для тех же данных, пока все данные не будутбыло прочитано.

Итак, использование BinaryReader кажется более естественным, но сильно ли это сказывается на производительности?

Ответы [ 2 ]

2 голосов
/ 12 июня 2010

Вы будете создавать изрядное количество мусора для каждого вызова Read (byte []). Для MemoryStream будет 40 байт, я перестал считать 64 байт для BinaryReader. Утилизация также обычно используется, хотя она ничего не делает. Нельзя ли определить эти накладные расходы по вашему вопросу.

Я бы лично предпочел перегрузку Read (BinaryReader) не только потому, что она более эффективна. Это также дает гибкость в изменении источника данных. Он больше не должен быть в байте [], его можно передать, скажем, из FileStream или NetworkStream.

0 голосов
/ 12 июня 2010

Если использование BinaryReader кажется более естественным, сделайте это. Я очень сомневаюсь, что есть какое-то заметное снижение производительности по сравнению с чтением из массива.

...