linux中向空文件写入内容,linux – 为什么写入现有文件比写一个新的空文件更快?...

我使用MappedByteBuffer在linux中编写文件.

File file = new File("testFile");

RandomAccessFile raf = new RandomAccessFile(file, "rw");

FileChannel fc = raf.getChannel();

MappedByteBuffer mbf = fc.map(FileChannel.MapMode.READ_WRITE, 0, file.length());

mbf.put(buffer);

如果testFile写入500MB,并且写入500MB数据两次,则需要1s.但是当我使用testFile时,写入500MB数据需要4s.

为什么覆盖文件比写新文件更快?如何以覆盖文件的速度更快地编写新文件?

解决方法:

覆盖或创建新文件的速度更快取决于文件系统类型.许多文件系统都会覆盖文件数据;然后覆盖更快,因为它只需要写入数据,而创建新文件需要先分配空间然后在新分配的空间中写入数据.我不希望有太大的不同.某些文件系统不会覆盖现有块(允许a write to be undone),然后通过写入新数据然后删除旧数据来覆盖现有文件.不过,我不认为两种情况都会有很大差异.

底层可以具有类似的效果,使一个操作比另一个更昂贵.例如,覆盖保留快照的系统会保留旧数据,以便可以恢复快照. Flash媒体只能批量擦除,因此新数据会写入空闲扇区,但覆盖某些数据最终会导致其被释放,这需要时间.

到目前为止,对读写时序影响最大的是缓冲和缓存.确保您在已知的缓存配置中执行基准测试(您应该在开始每个基准测试操作之前刷新磁盘缓存)并以缓冲区全部写入结束(通过调用sync完成),除非您要测量热缓存/缓冲区时序.例如,执行两次连续写操作,其中第一次写入仅写入内存缓冲区将不会比执行单次写入花费更多.

在任何情况下,如果需要4秒来完成你想要的操作,那么它需要4秒.没有什么神奇的方法可以让它快4倍.

标签:performance,linux,filesystems,files

来源: https://codeday.me/bug/20190814/1656450.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值