从文件中读取行而不存储任何内容会浪费内存

时间:2016-01-22 22:24:04

标签: c++ memory memory-leaks

我有一个包含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;
}

0 个答案:

没有答案