我已经寻找了一段时间的解决方案。我编写了一个程序,从两个不同的文本文件中获取数据,对其进行解析,并输出到另一个文本文件和ARFF文件中,以供Weka分析。我遇到的问题是,我编写的用于处理数据读取和解析操作的函数没有正确释放内存。每次调用会使用额外的大约100MB内存,而我需要在该函数中调用此函数60多次。是否有方法可以强制D语言对数组、动态数组和关联数组等进行内存释放?
我的问题示例:
struct Datum {
string Foo;
int Bar;
}
Datum[] Collate() {
Datum[] data;
int[] userDataSet;
int[string] secondarySet;
string[] raw = splitLines(readText(readFile)).dup;
foreach (r; raw) {
userDataSet ~= parse(r);
secondarySet[r.split(",").dup] = parseSomeOtherWay(r);
}
data = doSomeOtherCalculation(userDataSet, secondarySet);
return data;
}
data
变量之前没有声明它。这个变量是在模块级别作用域吗?对于readFile
也是一样。我只能假设这些变量在函数执行结束后仍然存在,并且是内存累积的地方。尝试通过值传递将“readFile”传递到函数中,看看是否有所不同,并尝试在函数内部声明data
。 - Ryan