c # Преобразование потока IO в байт [] медленно - PullRequest
0 голосов
/ 19 сентября 2018

Мой код прекрасно работает без вопросов.Проблема в том, что это так медленно!

Если я использую streamHelper, чтобы прочитать его в байтах, или использую stream.Copyto, это займет примерно столько же времени.ДОЛГОЕ ВРЕМЯ!

Должен ли быть более быстрый путь?

Если я читаю тот же файл с помощью FileStream из пути к файлу, он обрабатывается менее чем за 1 секунду.

Преобразование из потока в байт занимает около 6 секунд.Вся помощь очень ценится.Спасибо

byte[] byteArray = null;

// Read Data from Port Monitor
Stream inputStream = Console.OpenStandardInput();

using (MemoryStream ms = new MemoryStream())
{
    inputStream.CopyTo(ms);
    byteArray = ms.ToArray();
}

1 Ответ

0 голосов
/ 19 сентября 2018

У вас определенно может быть задержка от стандартного ввода.Кроме того, если вы перечитываете данные целиком, вы можете инкрементно читать, а не перечитывать все сразу.

Кроме того, если данные большие, вы копируете дважды с помощью CopyTo () (которая копирует потокв поток) и ToArray () (который копирует поток в массив).Вместо этого вы должны использовать inputStream.Read () для непосредственного чтения данных в буфер из исходного потока.

Код:

// Allocate a buffer the size of the whole stream
byte[] buffer = new byte[inputStream.Length];
// Set position at the beginning of our stream.
inputStream.Position = 0;
// Read all data into our buffer.
inputStream.Read(buffer, 0, buffer.Length);

Имейте в виду, что некоторые потоки не имеютдопустимое свойство "length", но это редко так, и я предполагаю, что это не так.Просто имейте в виду, что будет быстрее (хотя бы немного), но ваше узкое место может в значительной степени исходить из стандартного ввода, и поэтому это очень поможет, если это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...