gpt4 book ai didi

C# .net For() 步骤?

转载 作者:太空狗 更新时间:2023-10-29 22:17:31 27 4
gpt4 key购买 nike

我有一个函数,它处理一个包含 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 属性或方法),因为:

  1. 它显然有一个 void IsAlive(object) 签名。
  2. 它有明显的副作用(根据您的评论,它“增加了进度条并将‘工作’代理添加到新列表”)。

关于C# .net For() 步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4373179/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com