爸爸解析内存泄漏错误发生,解析大文件

时间:2016-04-26 08:44:25

标签: jquery ajax parsing csv memory

我使用papa parse加载大文件,可能超过300MB。

数据是这样的:

  

138,KOO," 0,2"

     

141,KOO," 0,2"

     

149,KOO," 0,2"

     

161,KOO," 0,2"

     

195,KOO," 0,2"

     

199,KOO," 0,2"

     

202,KOO," 0,2"

     

213,KOO," 0,2"

     

216,KOO," 2,0"

     

.....

但是发生加载内存泄漏错误,IE和Chrome

enter image description here

来源:

if (scaffolds.length == -1) {
    console.log("1");
    $.ajax({
        dataType: "text",
        type: "post",
        url: "./data/" + currentParse + "_data.csv",
        success: function(result) {
            var geneData = CSVToArray(result);
            parseGene(Date.now(), scaffold, geneData, 0, "", [], [], 0);
        }
    });
}
else {
    console.log("2");
    var groupNameAndScaffoldName = scaffold.name.split("@");
    var groupName = groupNameAndScaffoldName[0];
    var scaffoldName = groupNameAndScaffoldName[1];

    var data = [];
    Papa.parse("../data/dataset/" + sampleFolderName + "/" + groupName + "/" + scaffoldName + "_data.csv",{
        download: true,
        delimiter: "",  // auto-detect
        newline: "",    // auto-detect
        header: false,
        dynamicTyping: false,
        preview: 0,
        encoding: "",
        worker: true,
        comments: false,
        step: function(result, handle) {
            if (result.data[0][0]) {
                data.push(result.data[0]);
            }
        },
        complete: function() {
            parseGene(Date.now(), scaffold, data, 0, "", [], [], 0);
        },
        error: function(e) {
            console.log(e);
        },
        skipEmptyLines: true,
        chunk: undefined,
        fastMode: false
    });
}

我该如何调试?

1 个答案:

答案 0 :(得分:0)

@ user3916421

如果要使用块,则不能使用step。然后,您可以使用chunk属性以与使用step相同的方式声明函数。另外,如果要管理块的大小,可以在同一配置对象中包含一个属性chunkSize。

Papa.parse("../data/dataset/" + sampleFolderName + "/" + groupName + "/" + scaffoldName + "_data.csv",{
        download: true,
        delimiter: "",  // auto-detect
        newline: "",    // auto-detect
        header: false,
        dynamicTyping: false,
        preview: 0,
        encoding: "",
        worker: true,
        comments: false,
        complete: function() {
            parseGene(Date.now(), scaffold, data, 0, "", [], [], 0);
        },
        error: function(e) {
            console.log(e);
        },
        skipEmptyLines: true,
        chunk: function(result, handle) {
            if (result.data[0][0]) {
                data.push(result.data[0]);
            }
        },
        chunkSize: 1024 * 1024 //in bytes
        fastMode: false
    });