尽可能快地访问数百个文件

时间:2013-09-02 11:55:58

标签: c++ visual-studio-2010

所以我有一个程序,最多可以接收1000个文件路径,想法是读取3个特定字节来返回日期,这一切都很好。

问题在启动时开始,内存使用率飞向最大值,并在几秒钟内因此冻结了我的电脑。

我猜测开放过程耗费了几兆甚至......有关如何在没有大量内存使用的情况下实现我需要的任何想法?

注意:我打开的文件是15 GB

int main(int argc, char *argv[])
{
    string paths[1000] = {};
    int date[3] = {0};

    cout << "Arg count: " << argc << endl;
    if (argc <= 1)
        paths[0] = "PRIV.EDB";
    else
        for(int i = 1;i<argc;i++){
            paths[i-1] = argv[i];
        }

    cout << "Start\n\n";
    for (int i=0;i<1000;i++)
    {
        if (paths[i].empty())
            break;
        cout << paths[i] << endl;
        ifstream pFile;
        pFile.open(paths[i], ios::binary);
        pFile.seekg(195);
        date[0] = pFile.get();
        date[1] = pFile.get();
        date[2] = pFile.get();
        cout << date[0] << " : " << date[1] << " : " << date[2] << " \n";
        cout << endl;
        pFile.clear();
        pFile.close();
    }
    cout << "Fin\n";

    if (argc <= 1)
        getchar();

    return date[0];
}

1 个答案:

答案 0 :(得分:2)

使用内存映射文件以获得更好的性能。

http://msdn.microsoft.com/en-us/library/dd997372.aspx

MSDN:

  

这些内存映射文件非常适合使用   大型源文件

百科:

  

内存映射文件的主要好处是增加了I / O.   性能,尤其是在大文件上使用时...访问内存   映射文件比使用直接读写操作更快   两个原因。首先,系统调用比数量级慢几个数量级   对程序本地内存的简单更改。其次,大多数   操作系统实际映射的内存区域是内核   页面缓存(文件缓存),意味着不需要创建副本   用户空间。

为便于实施,请参阅: http://www.boost.org/doc/libs/1_54_0/doc/html/interprocess.html

使用:

升压/间/ file_mapping

升压/间/ mapped_region