1

我需要将多个形状文件加载到我的 R 会话中。目前,我正在单独加载每个形状文件。这可行,但需要很长时间,并且只使用了我可用 CPU 的 15%。最近,我尝试使用 ForEach 和 DoParallel 加载形状文件:

require(foreach)
require(doParallel)
require(rgdal)
files <- c(
    "AHVENANMAA/AHVENANMAA", 
    "ETELA-KARJALA/ETELA-KARJALA", 
    "ETELA-POHJANMAA/ETELA-POHJANMAA_1", 
    "ETELA-POHJANMAA/ETELA-POHJANMAA_2", 
    "ETELA-SAVO/ETELA-SAVO_1"
)
registerDoParallel(cores = 8)
listOfCurrentProvinces <- (
    foreach(
        x = files, 
        .packages = "rgdal", 
        .inorder = FALSE
    ) %dopar% 
        readOGR(x, layer = "DR_LINKKI")
)

这种方法有效并且非常快(它使用了我 100% 的 CPU)。但是,它占用了太多内存,尤其是当我多次重复该过程时。有什么方法可以使用 ForEach 和 DoParallel 而不会造成如此大的内存影响?我的机器有 8 个处理器(4 个物理处理器和 4 个逻辑处理器)并且有 16 GB 的 RAM。

4

1 回答 1

1

我做了几件似乎有帮助的事情。

registerDoParallel1) 仅使用该命令注册一次内核数。

2)gc()每次迭代后使用。

在我实施这些更改之前,我的记忆仅在 4 次(共 21 次)迭代后就爆炸了。现在,我已经完成了 6 次迭代,并且以 50% 的 RAM 使用率舒适地坐着。可用 RAM 的数量在大约 15 分钟内保持不变。

于 2016-06-17T23:02:34.167 回答