线程中的总执行时间

时间:2014-09-21 10:01:55

标签: c# multithreading httprequest

这是我的代码:

foreach (var obj in listObj)        
{
    Thread t = new Thread(()=> dosomething(obj))

    t.IsBackground = true;
    t.Start();

    Thread.Sleep(5);
}

listObj有500 objdosomething函数可能需要100毫秒,结束循环的总时间是9秒。我不知道为什么需要9s。请帮忙。

dosomething内部使用httprequest调用网址。

2 个答案:

答案 0 :(得分:2)

您可以为此创建一个简单的测试程序:

    void DoSomething()
    {
        Thread.Sleep(100);
    }

    void Test()
    {
        DateTime dt = DateTime.Now;
        for (int i=0; i<500; i++)        
        {
            Thread t = new Thread(() => DoSomething());

            t.IsBackground = true;
            t.Start();

            Thread.Sleep(5);
        }
        MessageBox.Show(DateTime.Now.Subtract(dt).TotalSeconds.ToString() );
     }

这需要我的慢速旧PC约2.8秒。 当我评论所有Thread.Sleep次来电时,我得到cca 2秒。 1个过程的线程最大数量限制相对较高,因此这不是问题。 如果您想获得有关正在发生的事情的详细信息,可以使用Sysinternals Process monitor。在那里你会看到发生了什么。也许有些库正在加载或类似的东西。

Process monitor

答案 1 :(得分:-2)

大致应该是500 * 5/1000 = 2.5秒+开销(对于for循环中的其他语句) 没有办法,它会采取9s。重新检查用于计算持续时间的调试语句