我有一个简单的 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--;
}
}
}
});
我需要限制它,是的,我知道 Max Parallelism 有它自己的限制,但是,在服务器中的 CPU 达到该限制之前,我的开关就会陷入困境。