多个system.threading.timer的初始化缓慢

时间:2013-10-01 14:07:38

标签: c# multithreading timer

我有一个检查网站商品状态的程序。

由于我之前没有学过线程,我只是在我的程序中使用system.threading.timer。

我有一个system.threading.timer列表和一些system.threading.timer

List<system.threading.timer> _timerList;
System.threading.timer _timerA;
System.threading.timer _timerB;
System.threading.timer _timerC;

我打电话给_timerA检查货物状态,并在货物启动时调用_timerList购买带有10个账户的账户清单的货物。

我每500毫秒执行一次_timerA。

_timerA = new System.Threading.Timer(new TimerCallback(submit_checkgoods), 0, 0, 500);

内部submit_checkgoods(之前调用_timerList.Add(...)):

if ( goodsIsUp == true)
{
    for (int k = 0; k < infolistbb.Count; k++)
    {
        int copy = k;
        _timerList[copy] = new System.Threading.Timer(new TimerCallback(submit_buygoods), copy, 0, 0);
    }
}

问题是我发现调用_timerlist [copy]来执行非常慢。

我使用秒表来检查调用_timerlist执行到submit_buygoods结束的时间以及执行submit_buygoods的时间。

submit_buygoods的执行非常快,但调用过程就像是一个接一个。

_timerList [0]完成后执行submit_buygoods,_timerList [1]然后去。

当线程太多(实际上只有15个)时,这是System.threading.timer的缺陷吗?

原因是什么?任何补救措施?切换到Thread t = new Thread()会有帮助吗?

1 个答案:

答案 0 :(得分:3)

使用Task而不是Thread,它们更适合短期工作。

Task.Factory.StartNew(submit_buygoods);

P.S。也许你不应该每500毫秒敲击服务器,你可能会被禁止你的IP。