簡體   English   中英

Chrome中的FileReader內存泄漏

[英]FileReader memory leak in Chrome

我有一個帶文件上傳功能的網頁。 上傳以5MB塊的形式執行。 我想在將每個塊發送到服務器之前計算它的哈希值。 塊由Blob對象表示。 為了計算哈希,我正在使用本機FileReader將這樣的blob讀入ArrayBuffer 這是代碼:

var reader = new FileReader();

var getHash = function (blob, callback) {
    reader.onloadend = function (e) {
        var hash = util.hash(e.target.result);
        callback(hash);
    };
    reader.readAsArrayBuffer(blob);
}

var processChunk = function (chunk) {
    if (chunk) {
        getHash(chunk, function (hash) {
            util.sendToServer(chunk, hash, function() {
                // this callback is called when chunk upload is finished
                processChunk(chunks.shift());
            });
        });
    }
}

var chunks = file.splitIntoChunks(); // gets an array of blobs
processChunk(chunks.shift());

問題:使用FileReader.readAsArrayBuffer似乎占用了大量未釋放的內存。 到目前為止,我在以下瀏覽器上測試了5GB文件:

  • Chrome 55.0.2883.87 m(64位):內存快速上升至1-2GB並在此周圍振盪。 有時它會一直向上,瀏覽器選項卡崩潰。 它可以使用比讀取塊大小更多的內存。 例如,在讀取500MB的塊后,該過程已經使用了700MB的內存。

  • Firefox 50.1.0:內存使用量大約為300-600MB

我嘗試過的代碼調整 - 一切都無濟於事:

  • 為所有塊重用相同的FileReader實例(如本問題所示
  • 為每個塊創建新的FileReader
  • 在開始新塊之前添加超時
  • 每次讀取后將FileReaderArrayBuffer設置為null

問題是:有沒有辦法解決問題? 這是FileReader實現中的錯誤還是我做錯了什么?

編輯 :這是一個JSFiddle https://jsfiddle.net/andy250/pjt9udeu/

這是Windows上的Chrome中的一個錯誤。 據報道: https//bugs.chromium.org/p/chromium/issues/detail?id = 674903

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM