我有一个包含2000个文件夹(0001到2000)的文件夹,每个文件夹包含许多文件,原始文件夹中总共有145000个文件。 我读了每个文件夹,然后读取文件夹中的每个文件。对于每个文件,我逐行读取并进行一些存储和处理。但内存使用情况很糟糕。我认为问题出在存储上,但是当我清理代码(存储和处理)时,我发现即使没有存储内容,内存使用也和以前一样。我的文件总大小为3.6 GB。执行一半文件夹(约1.8GB)的代码后,需要5GB的主内存。这段代码有什么问题? 代码在这里:
#define LINE_BUFFER_LEN 40960
int main(int argc, char** argv) {
DIR *dpdf;
struct dirent *epdf;
string fcount;
string path="/media/modb/78E60A4AE60A0958/final/";
string filename, filenumber;
int filenum;
char buffer[LINE_BUFFER_LEN];
string readFilePath;
ifstream infile;
int folderCount=1;
int periodFilesCount=0;
while (folderCount<2001){
fcount=IntToString(folderCount);
numOfzeros=(4-fcount.size());
fcount.insert(fcount.begin(), numOfzeros, '0');
dpdf = opendir((path+fcount).c_str());
if (dpdf != NULL){
while (epdf = readdir(dpdf)){
if (epdf->d_type==8){
filename=string(epdf->d_name);
filename=(filename.substr(0,filename.size()-4));
filenumber=(filename.substr(filename.find('_')+1,filename.size()));
filenum=atoi(filenumber.c_str());
readFilePath=path+fcount+"/"+filename+".txt";
infile.open(readFilePath.c_str());
if(!infile) {
cout<<"Error\n";
}
while(infile.getline(buffer, LINE_BUFFER_LEN))
{
//The code cleaned from here.
loopCounter++;
}
infile.close();
cout<<endl;
}
}
}
closedir(dpdf);
folderCount++;
}
return 0;
}