C#.net For()Step?

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方法(看起来像布尔属性或方法),因为:

  1. 它显然有一个void IsAlive(object)签名.
  2. 它具有可观察到的副作用(来自您的评论,它"增加进度条并将'工作'代理添加到新列表中").