VB.NET Threadsafe список? - PullRequest
       26

VB.NET Threadsafe список?

0 голосов
/ 20 января 2011

VB.NET, .NET 4

Привет всем,

У меня есть список (из байтов), который заполняется байтами из последовательного буфера события SerialPort.DataRecкид.Затем я пытаюсь разобрать данные.Часть процесса синтаксического анализа включает в себя удаление элементов List (Of Byte).Должен ли я быть обеспокоен тем, что список может быть изменен событием DataRectained, которое может возникнуть в процессе анализа?Я понимаю, что, вероятно, это зависит от того, что я пытаюсь сделать, но, если я должен быть обеспокоен (например, процесс синтаксического анализа нуждается в List.Count, чтобы он не менялся до тех пор, пока синтаксический анализ не будет завершен), как мне убедиться, что любые вызовы Addподождать пока парсер не закончит?Я предполагаю, что ответ - что-то вроде SyncLock, но я никогда не понимал, как работает SyncLock.Буду признателен за любую базовую помощь!

Заранее спасибо, Брайан

1 Ответ

2 голосов
/ 20 января 2011

Ну, это не самое лучшее использование циклов ЦП, удаление байтов из списка (байтов) является операцией O (n). Выполнение общего этапа обработки O (n ^ 2). Все еще довольно трудно оказывать какое-либо давление на процессор, поскольку последовательные порты работают медленно. Вы должны когда-либо изменять рабочий код только в том случае, если вы измерили, что это проблема с производительностью.

Если вы еще не там, подумайте о создании нового массива или списка из старого. Это O (n), дополнительная память не может повредить, учитывая медленную скорость передачи данных. Код тоже должен быть чище.

Что касается потоков, обязательно сделайте это в обработчике DataReceived. Это потокобезопасное и позволяет избежать чрезмерного давления на поток пользовательского интерфейса в случае, если вы вызываете.

...