编辑:
我注意到这些滞后尖峰只发生在visual studio中调试时。如果我在Visual Stduio之外运行.exe,程序不会使用超过3%的CPU。任何人都可以告诉我为什么会发生这种情况?并行对于在2,3分钟后导致大规模滞后峰值
我也遇到过使用的Parallel.For检查大量代理(通过使webrequests)并行processing.I'm一个问题。这是我的函数:
private ConcurrentBag<string> TotalProxies = new ConcurrentBag<string>();
private void CheckProxies()
{
ParallelOptions pOptions = new ParallelOptions();
pOptions.MaxDegreeOfParallelism = 100;
int max = TotalProxies.Count;
Invoke(new Action(() => { lbl_Status.Text = "Checking"; }));
Parallel.For(0, max, pOptions, (index, loopstate) =>
{
string Proxy = TotalProxies.ElementAt(index);
if (WebEngine.IsProxyWorking(Proxy))
{
WorkingProxies.Add(Proxy);
workingp++;
Invoke(new Action(() =>
{
lstv_Working.Items.Add(Proxy);
lbl_Working.Text = workingp.ToString();
}));
}
checkedp++;
Invoke(new Action(() => { lbl_Checked.Text = checkedp.ToString(); }));
if (Stop)
loopstate.Stop();
});
Invoke(new Action(() => {
lbl_Status.Text = "Idle";
}));
}
我的问题是如下所示:
对于第一个0-2000请求,程序工作正常,CPU使用率约为3-5%。然后,2-3分钟后,我遇到了大量且频繁的滞后尖峰,导致CPU使用率跳到100%。我不知道为什么会发生这种情况,因为它直到现在都运行良好。我希望有人能够帮助我理解导致这种情况的原因。
在这里你可以看到我的问题:
此外,这用于几天前工作正常。现在我有这个问题没有做任何改变的代码.. – Catalin
您或许可以使用探查器来检查哪部分代码持有CPU。事实上你没有改变你的代码中的任何东西,因为它正常工作使我认为HttpRequest调用之一的行为可能与它前几天的表现不同,很可能是因为另一方的行为有不同的表现(网站)。 –
@o_weisman如何使用探查器?我使用了默认的诊断工具,以及导致大部分CPU使用率的原因,它说外部代码。那是什么意思? – Catalin