我的网站抓取工具有问题,因为在抓取大约700个网址后,我收到系统内存异常。内存使用率从一开始就提高,一瞬间程序就停止了。
这是一个用C#编写的控制台应用程序。
我认为问题是我在每个foreach循环中实例化了6个新对象。比我通过它们,用反射获取属性值并创建我用于DB保存的最终对象。
我希望.NET能够在不再使用它们时销毁这些对象,但事实并非如此。我有什么选择? BAckground Worker更好吗?
我的代码是这样的......
Parallel.ForEach(Globals.Urls, url =>
{
progCtrl.indexIsSet = false;
var urlHelper = url.Split(';')[1].TrimStart('\t');
// var urlHelper = Globals.replaceGermanUmlauts(url.Split(';')[1].TrimStart('\t'));
HtmlDocument htm = new HtmlDocument();
try
{
Company comp0 = new Company();
Company comp1 = new Company();
Company comp2 = new Company();
Company comp3 = new Company();
Company comp4 = new Company();
Company comp5 = new Company();
Company comp6 = new Company();
//then I do some logic, add those companies to list and go further.
如何毁灭他们?我试过让它们成为IDisposable但是没有用。
感谢。