我在函数内部的循环中有一个函数.内部函数在内存中获取并存储大量数据(作为全局变量......我使用"R",类似于"S-Plus").循环遍历要获取的长数据列表.外部函数启动该过程并传入要获取的数据集列表.
for (dataset in list_of_datasets) { for (datachunk in dataset) {} }
我编写了内部函数来存储每个数据集,然后移动到下一个数据集,因此外部函数的所有工作都作为全局变量的副作用发生...一个大禁忌.这比收集和返回一个巨大的,占用记忆的向量矢量更好还是更糟?是否有优越的第三种方法?
如果我将数据向量存储在数据库而不是内存中,答案会改变吗?理想情况下,我希望能够终止该功能(或由于网络超时而使其失败),而不会丢失在终止之前处理的所有信息.
在外部函数中使用变量而不是全局变量.这将为您提供两种方法中的最佳方法:您不会改变全局状态,也不会复制大量数据.如果您必须提前退出,只需返回部分结果.
(参见R手册中的"范围"部分:http://cran.r-project.org/doc/manuals/R-intro.html#Scope)
记住你的Knuth."过早的优化是所有编程邪恶的根源."
试试副作用免费版.看它是否符合您的性能目标.如果确实如此,那么首先你没有问题; 如果没有,那么使用副作用,并为下一个程序员注意你的手被迫.