2016-03-07 112 views
0

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

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

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

,关于如何提高当前进程的任何其他想法是值得欢迎的。

+2

因为这似乎是相对我的范围,我会试探性的给出任何正式的答案,但对我来说似乎是一个事件系统将要走的路。集合订阅每个项目的事件并在对象更新时接收通知。 – BHustus

+0

Kilanny写了什么让我意识到,使每件物品都检查状态并在超时时通知价格非常昂贵 – LimS

回答

0

我想你应该总是重复上的所有项目,以寻找出超时物品需要处理。由于您的物品非​​常多,因此为每件物品制作计时器是一个非常糟糕的主意。

意见建议:

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

2-如果一个项目需要处理,由于其超时,把它在用于处理的队列中。您可以从队列中每次处理4个项目。这将提高性能,因为过多的多线程会带来相反的结果。

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

+0

感谢Kilanny,我会考虑使用您的第三个建议。我前一阵子想过,但似乎并不会对性能产生重大影响。 – LimS