Мы не знаем, что делает ваш микроконтроллер, но в вашем коде на C # вы вносите огромные накладные расходы на свою обработку, считывая байты один за другим.
Решение для уменьшения этих издержек, очевидно, заключается в том, что, не читайте байты один за другим.Просто избавьтесь от цикла for
, сделайте секунду sp.ReadLine()
сразу после обнаружения заголовка, поработайте с полученными байтами, чтобы сохранить координаты, и отбросьте остальные.
Если этот подход не исправляетВаша проблема, а затем попробуйте решить ее: прочитайте больше команд за один раз и обработайте их.На этом этапе, возможно, будет проще изменить работу микроконтроллера.
РЕДАКТИРОВАТЬ: Теперь, когда вы включили больше деталей, и, как вы уже поняли, мои комментарии вышене очень полезны.Во-первых, известно, что ReadLine()
очень медленный, см., Например, здесь .
То, что вы пытаетесь сделать, не так уж и требовательно, если вы работаете с числами.Поэтому решение может заключаться в том, чтобы использовать любой другой метод, я бы посоветовал попробовать BaseStream
реализовать свой собственный способ чтения между CR (что-то похожее на то, что предлагает вопрос, указанный выше).
В противном случае вы можете попробоватьDataReceived
событие .
Наконец, обратите внимание, что когда вы говорите:
Интервал таймера установлен на 10 мс, но даже если я изменю его на 1 мс, нет никакой разницы ...
относительно задержки на вашем микроконтроллере.Вы получили это с другой стороны: если вы хотите увидеть более высокую производительность чтения данных на вашем ПК, вам нужно увеличить и не уменьшать эту задержку (в противном случае вы отправляете даже больше данных, чем объем, который вы можете обработать),Но если ReadLines()
слишком медленно, я сомневаюсь, что вы можете улучшить производительность, используя это, если только вы не хотите читать один образец данных каждые 3 или 4 секунды.