編輯:
我注意到這些滯後尖峯只發生在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