Я пишу приложение на C # с помощью Microsoft Visual Studio 2019. Приложение взаимодействует с несколькими платами Arduino. Отправка и получение работают асинхронно с использованием модели TAP и работают нормально.
Приложение основано на приложении Windows Form с использованием .NET Framework 4.7.2. Я добавил DataGridView в форму, используя DataTable в качестве DataSource. Намерение состоит в том, чтобы использовать этот DataGridView в качестве регистратора данных, отображающего 5 столбцов: TimeStamp, DeviceID, Direction, Command и ErrorStatus.
Если я отключу DataGridView, я достигну 500 команд в секунду на китайском клоне Arduino. На реальном Arduino я, кажется, получаю только до 244 команд в секунду - см. Другой вопрос о stackoverflow ниже - но сейчас вопрос не в этом:
Когда я включаю свой DataGridView, я вижу, что скорость связи падает примерно до 25 команд в секунду, и это происходит исключительно из-за обновления строк в DataGridView. Но это похоже только на тот случай, когда DataGridView начинает прокрутку.
См. Ниже фрагмент кода:
dt.Rows.Add(new string[]
{
DateTime.Now.ToString("HH:mm:ss:fff"),
device._FMGSDevice,
action,
notifyData.Command,
notifyData.notifyError.ToString()
});
if (dt.Rows.Count > maxLines)
dt.Rows.RemoveAt(0);
dt - это таблица данных, которая используется в качестве источника данных для DataGridView. Для каждого сообщения в конце DataTable добавляется строка, которая затем автоматически обновляется в DataGridView.
maxLines - это константа, которая в настоящее время установлена на 500. Чтобы мой DataGridView не получал слишком много строк, я ограничиваю ее до 500 строк. Если предел достигнут, я удаляю первую строку с помощью RemoveAt (0) после добавления новой строки, чтобы сохранить ее максимум на 500 строках.
Теперь я вижу, что как только DataGridView начинает прокрутку (RemoveAt (0) заставляет все строки перемещаться вверх на одну строку), скорость резко падает.
Есть ли у кого-нибудь идеи, как ускорить прокрутку? Или есть еще один элемент, который я мог бы использовать для входа в журнал? (хотя мне тоже нужна фильтрация).