我想知道为什么当我尝试运行我的代码时xampp停止工作:
for(var pageNo=1; pageNo<= 10658;pageNo++){
carlistrequest('http://www.carlist.my/car?page_number='+pageNo, function(error, response, body){
if(!error && response.statusCode ==200){
var $ = cheerio.load(body);
$('.listing-content').find('h2.vr38dett-title > a').each(function(i, elem){
var data={
link: 'http://www.carlist.my/'+$(elem).attr('href')
};
console.log(data);
//insert urls into DB
connection.query('INSERT INTO urls SET ?', data, function(err, result){
if(err) throw err;
})
})
}
})
}
我收到了这个错误:
0025B32E模块xampp-control.exe中的异常EAccessViolation。 在module-xampp-control.exe中的地址0065B32E处的访问冲突。读 地址00000042。
我不知道我的代码有什么问题,但如果我只运行1000页就能正常运行。请帮助我。提前致谢
答案 0 :(得分:0)
我认为你有记忆问题。
在抛出异常之前,脚本会运行多少11K页?
您拥有使用外部作用域变量的匿名函数,应该创建闭包,我不确定它是否会释放已分配的内存。
也许你应该以某种方式检查使用的内存量,如果我的猜测正确,那么你应该重构你的代码。
例如,您可以通过regexp获取所有href,而不是使用选择器和每个循环。
还尝试收集数组中的所有href,然后在解析完成后立即将它们全部插入 - 这样就可以减少与数据库的交互。