C++ 比较读取文件到内存的速度

16 篇文章 0 订阅

当我有一个大文件要读到内存时,如何最快呢?

下面的代码,对于BUFFSIZE的大小做了调整,并测试每次读取的时间,

int main(int argc, char *argv[])
{
    unsigned int buffsize = 1024 * 512;    //512k
    int count = 0;    //读取的字节数
    int readcnt = 0;   //读取次数
    char* buff = new char[buffsize ];
    QString filepath = "E:/tool/Qt/qt-enterprise-windows-x86-5.15.2.exe";
    FILE *fd = fopen (filepath.toLatin1().data(), "rb");

    QTime t1 = QTime::currentTime();
    
    while (!feof (fd)){
        count = fread (buff, sizeof (char), buffsize , fd);
        readcnt++;
    }

    QTime t2 = QTime::currentTime();
    int elapsed = t1.msecsTo(t2);
    qDebug() <<"file size="<<count<<", readcnt="<< readcnt<< ", elapse is "<< elapsed << 
"ms";
    fclose(fd);
}

测试读取的文件大小是2.35G,测试机器win10,

i5-9400 CPU @ 2.90GHz 2.90 GHz,32G内存

当BUFFSIZE 与读取时间的关系是:

4k --> 1670ms

8k --> 1077ms

16k --> 753ms

32k --> 591ms

64k --> 520ms

128k --> 496ms

256k --> 470ms

512k --> 441ms

1M --> 437ms

2M --> 442ms

4M ->504ms

16M --> 780ms

128M --> 742ms

512M --> 737ms

1G --> 753ms

4G --> 761ms

从数据上可以看出,分多次读取,并且每次读取512k或者1M时,时间最短。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值