作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个函数,它处理一个包含 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);
}
如有任何帮助,我们将不胜感激。
最佳答案
您真的需要为每个工作项生成一个新线程吗?除非确实需要这样做(如果需要,请告诉我们原因),我强烈建议您使用 Managed Thread Pool反而。这将为您提供所需的并发优势,但没有运行数千个线程的资源需求(以及创建、销毁和大量上下文切换成本)。如果您使用的是 .NET 4.0,您可能还需要考虑使用 Task Parallel Library .
例如:
for (var i = 0; i < ListProxies.Items.Count; i++)
{
var s = ListProxies.Items[i] as string;
ThreadPool.QueueUserWorkItem(ProxyTest.IsAlive, s);
}
另一方面,我会认真考虑重命名 IsAlive
方法(它看起来像 bool 属性或方法),因为:
void IsAlive(object)
签名。关于C# .net For() 步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4373179/
我是一名优秀的程序员,十分优秀!