yu9148 发表于 2015-04-02 18:34

求助,如何缩短arm平台频繁读写文件时间!!!

ARM平台: flash:256M内存:128M

要求分析70M大小的数据3分钟之内出结果,现经过测试瓶颈主要卡在频繁读写文件上。大神们,看看如何优化?感谢!~~

部分代码:
       
       fp_read = fopen(filepath, "rb");
        for(i=0; i<32; i++)
        {
                strcpy(file_name, folder);
                strcat(file_name, filename_arr);
                fp_write_arr = fopen(file_name, "wb");
        }
        if(fp_read) {
                while(!feof(fp_read)) {
                        memset(buffer, 0, 32000*sizeof(short));
                        count_tmp = fread(buffer, 2, 32000, fp_read);
                        for(i=0; i<count_tmp; i++)
                        {
                                buffer=abs(buffer - 32768);//求绝对值
                                fwrite(&buffer, 2, 1, fp_write_arr);//循环写入每个子文件
                        }
                }
        }

要求是第一个数据放入第一个文件,第二个数据放入第二个文件 。。。。 第33个数据再放入第一个文件,目前测试主要卡在
fwrite(&buffer, 2, 1, fp_write_arr); 频繁的写文件上,70M数据用时3分钟左右!!~

考虑扩大buffer 一次性写入多点,但效果不明显!!!求助!

镇水铁牛 发表于 2015-04-02 20:20

你的flash读写性能有多少,如果ram够大,把数据都cache在ram中,开销就是读写flash的了吧。

yu9148 发表于 2015-04-03 09:22

因为数据大小也不能确定,也试过在程序中缓存多一点,比如10000个字节写一次,相当于32*10000,但是效果没有改善。
再大一个数量级测试就出错了!

用没有好的算法能提高这么大的循环写文件啊? 以70M的文件为例,这个要写 70*1024*512次!

yu9148 发表于 2015-04-03 10:17

以70M数据为例,这段代码测试时间为203s,注释掉写文件只要6s。求指点!!
//fwrite(&buffer, 2, 1, fp_write_arr);

镇水铁牛 发表于 2015-04-07 21:34

注释掉写操作,性能好也可以理解,毕竟flash的写惩罚,性能比较惨淡。
页: [1]
查看完整版本: 求助,如何缩短arm平台频繁读写文件时间!!!