我有一个.NET应用程序来管理几个大型项目集合。 每个项目都有一个“扫描时间”间隔(每1秒,每5秒,每分钟等等,它是用户定义的)。 当它是时候,该项需要运行一个内部方法,可能会改变其状态并写入数据库。
目前申请结构基本上是:
每个集合都在不同的线程中进行管理,并且在每个线程中,每个循环都有一个并行,遍历所有项目,并且对于每个项目,它检查是否已经过了足够的时间并且项目需要运行其内部方法。
当一个或多个线程有大量集合时,此方法会导致问题,其中许多项目具有较小的“扫描时间”。
因为它遍历所有项目以找出需要更新的项目。
我想将结构更改为某种Observer模式。 我的想法是每个项目将运行一个计时器并通知父线程它需要更新。 我看到有一个名为Reactive Frameworks的.NET库,但我不确定我是否可以使用它。
欢迎任何关于如何改进当前流程的其他想法。
答案 0 :(得分:0)
我认为你应该总是迭代所有项目来找出需要处理的超时项目。为每个项目制作一个计时器是一个非常糟糕的主意,因为你的物品非常多。
建议:
1-不要制作多个循环来检查扫描周期超时。只需制作一个循环来检查所有项目。
2-如果某个项目由于超时而需要处理,请将其放入队列进行处理。您可以每次从队列中处理4个项目。这将提高性能,因为过多的多线程会带来相反的结果。
3-您可以尝试根据扫描周期对项目进行分组。这将加快搜索速度,因为您不必搜索每个项目,而是搜索每个组。