这是我的代码:
foreach (var obj in listObj)
{
Thread t = new Thread(()=> dosomething(obj))
t.IsBackground = true;
t.Start();
Thread.Sleep(5);
}
listObj
有500 obj
,dosomething
函数可能需要100毫秒,结束循环的总时间是9秒。我不知道为什么需要9s。请帮忙。
在dosomething
内部使用httprequest
调用网址。
答案 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。在那里你会看到发生了什么。也许有些库正在加载或类似的东西。
答案 1 :(得分:-2)
大致应该是500 * 5/1000 = 2.5秒+开销(对于for循环中的其他语句) 没有办法,它会采取9s。重新检查用于计算持续时间的调试语句