【发布时间】:2009-06-12 19:03:01
【问题描述】:
当我遍历文件 A 中的行时,我正在解析该行并将每个字符串 (char*) 放入 char**。
在一行的末尾,我运行一个包含打开文件 B 的过程,使用 fgets、fseek 和 fgetc 从该文件中获取字符。然后我关闭文件 B。
我为每一行重复重新打开和重新关闭文件 B。
我想知道的是:
使用
malloc和free是否会显着影响性能,因此我应该使用myArray[NUM_STRINGS][MAX_STRING_WIDTH]之类的静态而不是动态char** myArray?打开和关闭文件 B 是否存在显着的性能开销(从概念上讲,数千次)?如果我的文件 A 已排序,有没有办法让我使用
fseek在文件 B 中“向后”移动,以重置我之前在文件 B 中的位置?
编辑事实证明,双重方法大大减少了运行时间:
我的文件 B 实际上是二十四个文件之一。而不是打开同一个文件 B1 一千次,然后打开 B2 一千次,等等。我打开文件 B1 一次,关闭它,B2 一次,关闭它等等。这减少了成千上万的
fopen和 @987654332 @ 操作大约 24 次。我使用
rewind()重置文件指针。
这使速度提高了大约 60 倍,这绰绰有余。感谢您将我指向rewind()。
【问题讨论】:
-
如果您必须跳回一个特定,以前在文件中的位置(而不是开头),您可能还需要检查 fgetpos() 和fsetpos().
标签: c performance malloc fseek