2016-12-07 35 views
2

我想知道如何銷燬緩衝區以釋放內存。
我有下面的代碼,它創建一個緩衝區併發送這個作爲響應。這工作正常,但是當我玩像75000行這樣的大陣時,我可以看到我的記憶接管了1Go,沒關係,但是當響應被髮送時,這個記憶被保留並且沒有空閒...我嘗試設置var buffernull在腳本的末尾,但沒有追加...有沒有解決方案來釋放此內存?如何從Node.js的垃圾收集器中「釋放」內存緩衝區?

var xlsxexport = require('node-xlsx'); 

module.exports = { 
    exportExcel: function (req, res) { 

     var excelData = [] 
     // ... 
     // Construction of the array excelData 
     // ... 

     var buffer = xlsxexport.build([{name:'export', data:excelData}]) 
     res.set 'Content-Type', 'application/vnd.openxmlformats' 
     res.set 'Content-Disposition', 'attachment; filename=' + filename 
     res.send buffer 
    } 
} 

回答

5

,你已經各大變量設置爲null,那麼你可以嘗試啓動GC。

當你運行你的腳本添加選項--expose-gc

node --expose-gc index.js

,只要你想你的腳本內ü可以調用GC:

global.gc()

但我強烈建議你找到一些不強制GC的方法。

祝你好運!

2

首先,您使用的模塊似乎導致大量的開銷爲75,000行,豈不是更好地使用CSV格式呢?

如果你確實想繼續你的方法,那麼有些V8選項可以限制一些內存限制。限制內存限制可能會浪費更多的時間浪費在做垃圾收集上,所以要小心過度優化。

這裏是下手的好地方:如果你真的相信你的代碼沒有泄漏Limit Node.js memory usage to less than 300MB per process