编辑:
我注意到这些滞后峰值仅在 Visual Studio 中调试时发生。如果我在 Visual Stduio 之外运行 .exe,该程序不会使用超过 3% 的 CPU。谁能告诉我为什么会这样?
我遇到了并行处理的问题。我正在使用 Parallel.For 检查大量代理(通过发出 webrequests)。这是我的功能:
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%。我不知道为什么会发生这种情况,因为它直到现在都运行良好。我希望有人可以帮助我了解导致这种情况的原因。
在这里你可以看到我的问题: