0

我制作了一些 cpp 应用程序,用于统计 Android 设备中外部 sd 卡上的 i/o 操作。

我注意到,如果我出于读取目的打开文件需要几十微秒 - 例如 138 微秒,而出于写入目的则需要 5265 微秒,这是 38 倍大

这是为什么?

编辑:在“O_WRONLY”的情况下 - 该文件以前不存在。

我的具体代码如下:

int fd = open(file_name, O_RDONLY);

int fd = open(tmp_name,O_CREAT|O_TRUNC|O_WRONLY);
4

2 回答 2

2

如果文件存在,则在第二种情况下,它必须被截断。这需要额外的工作,并且可以很好地解释差异。

如果文件不存在,第一次调用会失败,第二次调用会创建文件。创建文件需要工作,而且比简单地发现它不存在要慢。

于 2012-11-28T09:21:39.197 回答
1

截断意味着可能会修改 SD 卡的内容。如果截断的文件非常大,这可能需要一些时间。

无论如何,文件创建都涉及对 SD 卡的写入,因此它肯定比读取要慢。影响写入速度的另一个因素是 SD 卡的使用年限。如果有很多写入,即使是很小的写入,搜索新的未使用块可能会消耗相当长的时间。

于 2012-11-28T09:22:46.983 回答