循环巨大阵列时Xampp停止工作?

时间:2015-12-08 05:05:50

标签: node.js xampp

我想知道为什么当我尝试运行我的代码时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页就能正常运行。请帮助我。提前致谢

1 个答案:

答案 0 :(得分:0)

我认为你有记忆问题。

在抛出异常之前,脚本会运行多少11K页?

您拥有使用外部作用域变量的匿名函数,应该创建闭包,我不确定它是否会释放已分配的内存。

也许你应该以某种方式检查使用的内存量,如果我的猜测正确,那么你应该重构你的代码。

例如,您可以通过regexp获取所有href,而不是使用选择器和每个循环。

还尝试收集数组中的所有href,然后在解析完成后立即将它们全部插入 - 这样就可以减少与数据库的交互。