2015-08-16 2 views
0

Я использую SerialPort в C# и мой код выглядит так:Как я могу использовать функцию ReadByte быстрее

FileStream MyFile = new FileStream(strFileDestination, FileMode.Append); 
BinaryWriter bwFile = new BinaryWriter(MyFile); 
bwFile.Write(serialPort1.ReadExisting()); 
bwFile.Close(); 
MyFile.Close(); 

, когда я использую

bwFile.Write(serialPort1.ReadByte()); 

вместо

bwFile.Write(serialPort1.ReadExisting()); 

, скорость записи в файле уменьшается примерно с 130 КБ/с до 28 КБ/с , и когда я использую

bwFile.Write((byte)serialPort1.ReadByte()); 

, скорость записи уменьшается до 7 КБ/с. Я хочу знать, как я могу записать файл в качестве третьей команды и иметь скорость 130 КБ/с.

+0

может быть do 'serialPort1.ReadByte()' в цикле? –

+0

Да. Я использую эту команду в цикле. цикл выглядит так: while Logger == true {/ * код, который я разместил * /}, и Logger - это переменная, которая позволяет моей программе писать в файл. нажатием кнопки logger изменяется на false – Mohammad

ответ

-1

Рассматривали ли вы просто использование потока для записи данных? Я не думаю, что вы на самом деле используете дополнительные функции, которые BinaryWriter предлагает по Stream.Write.

Просто вызвать метод CopyTo()

Stream destination = new FileStream(...) 
MyFile.CopyTo(destination); 

Что под капотом звонит следующий код:

byte[] buffer = new byte[bufferSize]; 
int read; 
while ((read = serialPort1.Read(buffer, 0, buffer.Length)) != 0) 
{ 
    destination.Write(buffer, 0, read); 
} 

взглянуть на эту должность для получения дополнительной информации: https://stackoverflow.com/a/411605/283787

+0

Спасибо. Я пробовал использовать только Filestream. но данные в файле не принимаются полностью. Я имею в виду где-то в файле, некоторые данные не являются реальными данными, отправленными отправителем на мой ноутбук. Кстати, у моего ноутбука нет последовательного порта, а устройство, которое отправляет на мой ноутбук, использует USB-кабель, и я использую виртуальный COM. – Mohammad

+0

Спасибо. Я пробовал использовать простой Filestream. но данные в файле не принимаются полностью. Я имею в виду где-то в файле, некоторые данные не являются реальными данными, отправленными отправителем на мой ноутбук. Кстати, у моего ноутбука нет последовательного порта, а устройство, которое отправляет на мой ноутбук, использует USB-кабель и использует виртуальный COM. в любом случае я не мог использовать код, который вы пишете выше. Я получил ошибку компиляции. Можете ли вы объяснить код больше, пожалуйста. (Мой английский плохой, извините, если у меня была ошибка в предложениях, и я не понял смысла предложения «Который под капотом вызывает следующий код») – Mohammad

+0

Какая ошибка компиляции вы получаете? Для полного объяснения взгляните на ссылку, которую я разместил, там есть более подробная информация. – openshac

Смежные вопросы