2013-07-19 62 views
1

这可能是更多的建议,但听我说。用时间间隔更新对象

我有一个对象,必须刷新每个预设的时间段(时间由用户指定)。如果不是更多,物体的数量最可能达到1000。

我想出了三种方法,我想找出使用​​某些方法的性能问题。

我想过为每个对象使用一个计时器,向它添加事件,当计时器达到某个值时,触发该事件,将对象的状态设置为刷新,以及下一个数据包何时进入,刷新某些对象

==或==

具有刚运行定时器的定时器线程,每蜱的量命中的所述乘法器(10分钟,5分钟等),它会调用具有该倍数的对象并设置刷新标志,并在数据包进入时刷新这些标志。

我不确定是否为每个对象添加一个定时器是一个好主意,因为负载。

回答

0

我会避免为每个对象添加一个计时器。也许你可以有一个单独的线程负责启动对象的更新。如果您认为这不会导致并发问题,则可以使用Parallel.ForEach在所有用户上运行并发更新。例如,类似于:

Thread updateThread = new Thread(updateLoop); 
IEnumerable<Updateable> _updateableObjects; 
public static void Main() 
{ 
    updateThread.Start(); 
} 

private static function UpdateLoop() 
{ 
    while (true) 
    { 
     Parallel.ForEach(_updateableObjects, obj => obj.Update()); 
     Thread.Sleep(1000); 
    } 
}