gpt4 book ai didi

C++:IO 性能问题

转载 作者:行者123 更新时间:2023-11-30 02:01:05 26 4
gpt4 key购买 nike

我的内存中有一个大数组。我在文件中使用:

             FILE* fp = fopen("filename", "wb");
fwrite(array, sizeof(uint32_t), 1500000000 , fp); // array saved
fflush(fp) ;
fclose(fp);

并使用以下方法再次阅读:

              FILE* fp = fopen("filename", "rb");
fread(array, sizeof(uint32_t), 1500000000 , fp);
fclose(fp);

写入需要 7 秒,读取需要 5 秒。

实际上,我不必写整个数组。我必须通过检查一些条件来编写和阅读它。喜欢(示例):

#include<iostream>
#include <stdint.h>
#include <cstdio>
#include <cstdlib>
#include <sstream>

using namespace std;

main()
{
uint32_t* ele = new uint32_t [100] ;
for(int i = 0; i < 100 ; i++ )
ele[i] = i ;

for(int i = 0; i < 100 ; i++ ){
if(ele[i] < 20)
continue ;
else
// write ele[i] to file
;
}

for(int i = 0; i < 100 ; i++ ){
if(ele[i] < 20)
continue ;
else
// read number from file
// ele[i] = number * 10 ;
;
}

std::cin.get();
}

出于这个原因,我正在做的是:

写作使用:

for(int i = 0; i < 1500000000 ; i++ ){
if (arrays[i] < 10000000)
continue ;
uint32_t number = arrays[i] ;
fwrite(&number, sizeof(uint32_t), 1, fp1);
}

读取使用:fread(&number, sizeof(uint32_t), 1, fp1);

这种情况:写作需要 2.13 分钟,阅读需要 1.05 分钟。

这对我来说是相当长的时间。谁能帮我,为什么会这样(在第二种情况下文件大小小于第一种情况)?以及如何解决这个问题?还有其他更好的方法吗?

最佳答案

benchmarked this a little while ago ,并且在我的盒子上,许多小的 fwrite() 调用只能维持大约 90 MB/s(磁盘比这快得多,所以测试不是磁盘绑定(bind)的)。

我的建议是做你自己的缓冲:将值写入一个中间数组,不时使用单个 fwrite() 写出整个数组。

关于C++:IO 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14498893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com