当我遍历文件 A 中的行时,我正在解析该行并将每个字符串 ( char*
) 放入char**
.
在一行的末尾,我运行一个过程,该过程包括打开文件 B,使用fgets
,fseek
并fgetc
从该文件中获取字符。然后我关闭文件 B。
我为每一行重复重新打开和重新关闭文件 B。
我想知道的是:
malloc
使用and是否会对性能产生重大影响free
,因此我应该使用静态的东西myArray[NUM_STRINGS][MAX_STRING_WIDTH]
而不是动态的东西char** myArray
?打开和关闭文件 B 是否有显着的性能开销(从概念上讲,数千次)?如果我的文件 A 已排序,有没有办法让我
fseek
在文件 B 中“向后”移动,以重置我之前在文件 B 中的位置?
编辑结果证明,一种双重方法大大减少了运行时间:
我的文件 B 实际上是二十四个文件之一。而不是打开同一个文件 B1 一千次,然后打开 B2 一千次,等等。我打开文件 B1 一次,关闭它,B2 一次,关闭它等等。这将数千次
fopen
操作减少fclose
到大约 24 次。我曾经
rewind()
重置文件指针。
这产生了大约 60 倍的速度提升,这已经绰绰有余了。谢谢你指点我rewind()
。