R中使用foreach時清理內存

foreach能較大的提高計算速度,但是R不會自動清理內存,導致服務器內存經常佔用過高,因此使用時需要及時清理內存,以如下例子所示。
我需要讀取一批excel文件,在運行下面的代碼前,經過4次測試,Rstudio的內存情況是這樣的(Mb):
232, 237, 231.8, 230.2
在執行下面的代碼後

qcc_result <- foreach(i=1:length(result_files), .combine=rbind) %dopar% {
    require(readxl)
    f_path <- paste0("test/", result_files[i])
    # gc()
    return(read_xls(f_path, skip = 1, col_names = T))
}
gc() # 釋放內存

內存佔用爲 397.6。

qcc_result <- foreach(i=1:length(result_files), .combine=rbind) %dopar% {
    require(readxl)
    f_path <- paste0("test/", result_files[i])
    gc() # 釋放內存
    return(read_xls(f_path, skip = 1, col_names = T))
}
gc()  # 釋放內存

執行了5次,執行完成後,內存使用分別爲 352.9, 346, 373.1,369.0,346。顯然,foreach每次執行時,本身也會佔用內存,而且用完以後也不會釋放,因此在foreach代碼塊中使用gc()釋放內存後,也會減少使用的內存。

注意,gc()的位置要在return之前。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章