我一直在尝试使用Backgroundworker在for循环中为该范围内的每个IP地址创建一个有效的多线程网络扫描程序,但遇到了以下问题:
1)UI线程总是间歇性地冻结,在此期间内存使用量大大增加,有时高达2-3GB用于255 IP地址扫描。
2)即使在为每个IP创建新的Backgroundworker之间的循环中没有延迟,也只产生最多30-40个线程。
生成每个线程的代码如下所示。还有更好的方法吗?
for (int i = 0; i < _deviceList.Count; i++)
{
_bgw = new BackgroundWorker();
_bgw.WorkerSupportsCancellation = true;
_bgw.WorkerReportsProgress = true;
_bgw.DoWork += _bgw_DoWork;
_bgw.ProgressChanged += _bgw_ProgressChanged;
_bgw.RunWorkerCompleted += _bgw_RunWorkerCompleted;
_bgw.RunWorkerAsync(_deviceList[i]);
}