You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

文件截断操作是否影响缓存及后续文件写入性能?

截断文件后写入是否比直接写入更慢?

假设先向文件A写入一定数据,关闭后用open("A", O_TRUNC | O_WRONLY);重新打开文件,再写入同等数据。这种方式会比不执行截断的程序更慢吗?换句话说,截断操作是否会清除文件内容的缓存行,导致后续写入操作始终出现缓存未命中?

测试验证

按照测试方案,我编写了如下代码对比两种方式的性能差异:

// includes

#define M 1024*128 // 128 KB

int main(int argc, char *argv[]) {
    double start = get_seconds(); // 基于gettimeofday()实现

    int out = open(argv[1], O_RDWR|O_CREAT|O_TRUNC, 0666);
    int k;
    char buf[M];

    for(k=0; k<M; k++) {
        buf[k] = '0';
    }

    write(out, buf, sizeof(buf));
    close(out);

    printf("%f\n", get_seconds() - start);
    return 0;
}

通过脚本连续执行该代码及不含O_TRUNC的相同版本各1000次,每次使用不同文件名,得到以下平均结果:

文件大小不含O_TRUNC含O_TRUNC性能提升倍数
32 KB0.0000603 s0.0001182 s1.96X
64 KB0.0001004 s0.0001759 s1.75X
128 KB0.0001621 s0.0002640 s1.63X
256 KB0.0002554 s0.0004336 s1.70X
512 KB0.0004284 s0.0007537 s1.76X
1024 KB0.0007371 s0.0011899 s1.61X

结论

从测试结果可以明显看出,执行O_TRUNC截断后的写入操作比不截断的版本慢1.6~2倍左右,两种方式存在显著的性能差异。

内容的提问来源于stack exchange,提问作者Hanz Schmidt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 18:40:16