VB.NET、.NET 4
大家好,
我有一个(字节)列表,其中填充了SerialPort.DataRecieved事件时串行缓冲区中的字节。然后,我尝试解析数据。解析过程的一部分涉及删除列表的元素(字节)。我应该担心在解析过程中可能引发的DataRecieved事件修改列表吗?我意识到这可能取决于我试图做什么,但是,假设我应该关注(例如,解析过程需要List.Count在解析完成之前保持不变),我应该如何确保任何Add调用都等到解析器完成?我想答案是类似于SyncLock,但我从来没有真正理解过SyncLock是如何工作的。任何基本的帮助都将不胜感激!
提前谢谢你,布赖恩
发布于 2011-01-20 06:51:20
嗯,这不是CPU周期的最大利用,从列表中删除字节(字节)是O(n)操作。使整个处理步骤为O(n^2)。要在cpu上施加任何压力仍然是相当困难的,因为串行端口非常慢。只有当你测量出它是一个性能问题时,你才应该修改工作代码。
如果还没有,那么考虑从旧的数组或列表创建一个新的数组或列表。这是O(n),考虑到缓慢的数据速率,额外的存储不会有什么影响。代码也应该更干净。
就线程而言,请确保在DataReceived处理程序中执行此操作。这是线程安全的,并且避免在调用时对UI线程施加过大的压力。
https://stackoverflow.com/questions/4741683
复制相似问题