【问题标题】:Notify parent on change in child通知家长孩子的变化
【发布时间】:2016-03-07 13:52:35
【问题描述】:

我有一个管理多个大型项目集合的 .NET 应用程序。 每个项目都有一个“扫描时间”间隔(每 1 秒、每 5 秒、每分钟等,由用户定义)。 时间到了,项目需要运行一个内部方法,该方法可能会改变其状态并写入数据库。

目前的应用结构基本是:
每个集合都在不同的线程中进行管理,并且在每个线程中,每个循环都有一个并行的循环,遍历所有项目,并且对于每个项目,它检查是否已经过了足够的时间并且项目需要运行他的内部方法。 当一个或多个线程的集合很大时,这种方法会导致问题,其中许多项目的“扫描时间”很短。 因为它会遍历所有项目以找出需要更新的项目。

我想将结构更改为某种观察者模式。 我的想法是每个项目都将运行一个计时器并通知父线程它需要更新。 我看到有一个名为 Reactive Frameworks 的 .NET 库,但我不确定是否可以使用它。

欢迎任何其他关于如何改进当前流程的想法。

【问题讨论】:

  • 由于这似乎相对超出了我的范围,我会尝试给出任何正式的答案,但对我来说,事件系统似乎是要走的路。该集合订阅每个项目的事件并在对象更新时接收通知。
  • Kilanny 写的内容让我意识到,让每个项目检查其状态并在超时时通知会非常昂贵

标签: c# .net vb.net multithreading parallel-processing


【解决方案1】:

我认为您应该始终迭代所有项目以找出需要处理的超时项目。为每个项目设置一个计时器是一个非常糟糕的主意,因为你的项目非常多。

建议:

1- 不要创建多个循环来检查扫描周期超时。只需创建一个循环来检查所有项目。

2- 如果某个项目由于超时而需要处理,请将其放入队列中进行处理。例如,您每次可以从队列中处理 4 个项目。这将提高性能,因为过多的多线程会带来相反的结果。

3- 您可以尝试根据扫描周期对您的项目进行分组。这将加快搜索速度,因为您不必搜索每个项目,而是搜索每个组。

【讨论】:

  • 感谢 Kilanny,我会考虑使用您的第三个建议。前段时间我考虑过,但似乎不会对性能产生太大影响。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2012-06-03
相关资源
最近更新 更多