1

我开发了一个数据采集子系统作为 DLL,它使用自己的线程捕获数据并使用 ObservableCollections 发布数据。我面临几个问题,因为事件的消费者在收到 ObservableCollection 事件时会执行昂贵的操作,这使得我的引擎捕获数据的速度比预期的要慢。

我计划在不同的线程中发送事件以避免这个问题,但我有几个问题:

public class ObservableCollection2
{
    public void Add()
    {
        _internalObservableCollection.Add();
        new Thread() { => Raise the event }
    }
}
  1. 这是标准解决方案已经解决的问题吗?看起来线程争用应该是相对常见的。
  2. 使用线程不会严重降低应用程序的性能?
  3. 使用 ThreadPool 不会使用所有可用的线程,因为在子系统中每秒发送 100 到 200 个通知是正常的?

谢谢你的想法。

4

1 回答 1

2

关于这种情况可以做些什么,有几个想法。

  1. 客户端不能在事件处理程序中执行繁重的代码——毕竟,他们知道他们正在阻塞处理。因此客户端必须记住集合已更改,并将处理卸载到私有线程中。
  2. 为每个事件使用一个新线程并不是最好的解决方案。如果你还是这样做,也许线程池线程是一个更好的主意。
  3. 如果有关更改的消息经常出现,也许您想限制通知,并以更大的包发送它们?我不知道开箱即用的解决方案,但也许 Rx 扩展会有所帮助。
  4. ObservableCollection是一个相当沉重的课。我个人只在视图模型中使用它来从视图绑定,并且在模型中我求助于一个包含内部集合的自制类,并在需要时发送所需的事件。这样我就可以更好地控制发生的事情。
于 2012-05-31T11:26:16.097 回答