有两个线程。
第一个线程
第一个线程
FILE* f; f = fopen(szPath,"r"); while(!feof(f)) { //处理每行数据 }
第二个线程
FILE* f; ... while(1) { f = fopen(szPath,"a+");//根据处理结果存数据到具体文件 fprintf(f,"%s",szLine); fclose(f) }
代码里面有频繁的fopen、fclose操作!
当读取的数据量只有10万行以下的时候,没有问题。但是当数据量很大,例如1000万行,500M大小,就会出现问题。
问题就是:读取的速度明显变慢。
解决方案
10
大数据量变慢也是正常的,写个资源池,边处理边存储你的数据
90
在文件大小相同的前提下:
读刚读过的文件比头次读没读过的文件快
读转速快的硬盘上的文件比读转速慢的硬盘上的文件快
读没有磁盘碎片的文件比读有磁盘碎片的文件快
读文件不处理比边读边处理快
单线程从头到尾一次读文件比多线程分别读文件各部分快(非固态硬盘上)
读固态硬盘上的文件比读普通硬盘上的文件快
写相似。
读刚读过的文件比头次读没读过的文件快
读转速快的硬盘上的文件比读转速慢的硬盘上的文件快
读没有磁盘碎片的文件比读有磁盘碎片的文件快
读文件不处理比边读边处理快
单线程从头到尾一次读文件比多线程分别读文件各部分快(非固态硬盘上)
读固态硬盘上的文件比读普通硬盘上的文件快
写相似。