Member 4605890 Ответов: 2

Проблема Vb.net использование последовательный порт процессора


Я считываю данные с GPS-устройства, подключенного к COM-порту. Однако после открытия порта загрузка процессора постоянно остается 4-5% или даже больше, даже когда я вообще не обрабатываю данные! Вот код:

Using comPort As New SerialPort

              comPort.PortName = "COM3"
              comPort.BaudRate = 4800
              comPort.Parity = Parity.None
              comPort.StopBits = StopBits.One
              comPort.DataBits = 8
              comPort.Handshake = Handshake.None
              comPort.Encoding = System.Text.Encoding.Default

              comPort.Open()

              Thread.Sleep(100000000) '<--- CPU usage very high during this


           End Using


На старых компьютерах загрузка процессора составляет 50%, так что это реальная проблема. Есть ли какой-нибудь хороший способ обойти это?

При открытии порта в Putty процессор большую часть времени остается 0%, достигая 1% случайным образом!!

Что я уже пробовал:

Я много гуглил и не нашел ни одного хорошего решения. Я знаю, что есть способ исправить это, но я недостаточно опытен, чтобы сделать это.

Patrice T

Этот код - это не то, что съедает процессор.
Дайте подробности.

2 Ответов

Рейтинг:
2

Member 4605890

Проблема решена. Настоящая проблема заключалась в GPS-устройстве, которое посылало много ненужных данных на мой компьютер. Отключив их с помощью команд NMEA, я смог сократить загрузку процессора до 0-1%. Кроме того, я начал использовать DataReceived - event, как в примерах, связанных Йохеном Арндтом. Спасибо за совет!


Рейтинг:
1

Jochen Arndt

Вы должны использовать функцию приема на основе событий, которая выполняется в собственном потоке. Это будет работать только (использовать процессор), когда будут доступны новые данные.

Вы можете поискать в интернете что-то вроде "vb.net serialport tutorial".

Некоторые ссылки:
Последовательный порт связи в VB.Net - VB.NET учебники | сон.В.Код[^]
Пример сериального порта Windows 8 в VB.NET (C#) в C#, VB.NET для Visual Studio 2008[^]


Member 4605890

Спасибо за ответ. Я проверил эти примеры, и проблема все еще существует, потому что все примеры используют один и тот же класс SerialPort и Open - method. Я ищу какое-то другое решение.

Jochen Arndt

У вас есть удаленная нить.Сон() позвонить?

Эти примеры показывают, как это делается с помощью VB.Net (игнорируя старый, но все еще поддерживаемый метод управления MSComm). Проблема не в классе SerialPort, а в вашем коде, использующем его неправильно.

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