Art*_*t W 5 .net c# multithreading loops for-loop
我有一个函数,它处理6100个列表项的列表.当列表只有300个项目时,用于工作的代码.但是立即与6100崩溃.有没有办法我可以循环浏览这些6100个项目,一次说30个并且每个项目执行一个新线程?
for (var i = 0; i < ListProxies.Items.Count; i++)
{
var s = ListProxies.Items[i] as string;
var thread = new ParameterizedThreadStart(ProxyTest.IsAlive);
var doIt = new Thread(thread) { Name = "CheckProxy# " + i };
doIt.Start(s);
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
Ani*_*Ani 10
你真的需要为每个工作项生成一个新线程吗?除非确实需要(如果是,请告诉我们原因),我强烈建议您使用托管线程池.这将为您提供所需的并发优势,但无需运行数千个线程的资源要求(以及创建,销毁和大量上下文切换成本).如果您使用的是.NET 4.0,则可能还需要考虑使用任务并行库.
例如:
for (var i = 0; i < ListProxies.Items.Count; i++)
{
var s = ListProxies.Items[i] as string;
ThreadPool.QueueUserWorkItem(ProxyTest.IsAlive, s);
}
Run Code Online (Sandbox Code Playgroud)
另外,我会认真考虑重命名IsAlive方法(看起来像布尔属性或方法),因为:
void IsAlive(object)签名.