【发布时间】:2014-12-02 18:00:02
【问题描述】:
如果在嵌套的for循环中迭代写入文件,在循环之前打开文件并在循环之后关闭文件,而不是在循环内打开和关闭,效率有什么区别吗?请参阅以下内容:
int main(){
FILE *file1;
char filename;
int i, j, N, M;
for(i=0; i<N; i++){
file1=fopen(filename, "a");
for(j=0; j<M; j++){
fprintf(file1,"%d %d\n", i, j);
}
fclose(file1);
}
return 1;
}
或
int main(){
FILE *file1;
char filename;
int i, j, N, M;
file1=fopen(filename, "a");
for(i=0; i<N; i++){
for(j=0; j<M; j++){
fprintf(file1, "%d %d\n", i, j);
}
}
fclose(file1);
return 1;
}
【问题讨论】:
-
为什么不对其进行基准测试并自己找出答案?
-
为什么有人会使用第一个代码 sn-p ?
-
嗯,在第一种情况下,您正在做更多的工作,因此需要更长的时间。无论它是否实时产生影响,您都只能使用基准测试。
-
保持文件打开通常更有效,因为当您关闭文件时缓冲区和缓存会被刷新。但是,如果您担心在发生崩溃或电源故障时丢失数据,那么您可能需要采取更具防御性的方法,即反复打开和关闭文件。
-
@PaulR 你不会让文件系统或操作系统更好地处理电源故障吗?我也想过这个问题,但是如果
fprintf发生崩溃,文件仍然是打开的。并且使用缓存和所有功能,即使文件已关闭,也可能根本不会将任何内容写入磁盘。
标签: c performance for-loop io fopen