gpt4 book ai didi

c# - 安全地限制并行、Foreach 循环中类调用的数量

转载 作者:行者123 更新时间:2023-11-30 22:29:38 24 4
gpt4 key购买 nike

我有一个简单的 foreach 循环,它基于 while 循环和一个静态 int 来限制自己。如果我不限制它,我的 CPU 会保持在 10% 以下,如果我限制它,我的 CPU 会上升到 99/100%。如何安全地限制对 Paralell.Foreach 中某个类的调用次数?

static int ActiveThreads { get; set; }
static int TotalThreads { get; set; }

var options = new ParallelOptions();
options.MaxDegreeOfParallelism = 1;
Parallel.ForEach(urlTable.AsEnumerable(),options,drow =>
{
using (var WCC = new MasterCrawlerClass())
{
while (TotalThreads <= urlTable.Rows.Count)
{
if (ActiveThreads <= 9)
{
Console.WriteLine("Active Thread #: " + ActiveThreads);
ActiveThreads++;
WCC.MasterCrawlBegin(drow);
TotalThreads++;
Console.WriteLine("Done Crawling a datarow");
ActiveThreads--;
}
}
}
});

我需要限制它,是的,我知道最大并行度有它自己的限制,但是,我的开关在服务器中的 CPU 达到该限制之前就陷入了困境。

最佳答案

两件事:

1) 您似乎没有使用您在此示例中创建的 ParallelOptions()

2) 如果出于某种原因您不想使用 ParallelOptions,则可以使用 Semaphore

 Semaphore sm = new Semaphore(0, 9);

// increment semaphore or block if = 9
// this will block gracefully without constantly checking for `ActiveThreads <= 9`
sm.WaitOne();

// decrement semaphore
sm.Release();

关于c# - 安全地限制并行、Foreach 循环中类调用的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10115388/

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