- 论坛徽章:
- 5
|
原帖由 nj_zhangchuntao 于 2009/3/24 11:00 发表 ![]()
1) 如果把一个文件存储在一个文件夹下,那么文件数量大了以后,文件枚举的速度会大大降低, 除了文件数量多了以后,枚举的文件数量多以外,导致速度降低还有没有文件系统上的其他原因。
2) 下面我开始做优化,把文件夹数量搞成2层,第一层从0到F(16进制),每个第一层文件夹里还有0到F文件夹,这样一个256个文件夹。创建文件的时候,随机在这256个文件夹里面选。这样解决了问题1,但是问题2出现了: 频繁创建文件时,在IO上占用的性能非常大。后来我又进一步做了优化,改为某个时间段,选一个文件夹,创建文件,这样IO的占用降低了,整个程序性能提高了超过50%。我想知道这样做性能能提高的原因,我觉得应该是filesystem cache机制的原因,但是理论上我说不上来。
先声明一下, 俺不牛.
谈一下我的理解:
1. 在一个文件夹下, 会导致节点过多, 而变成文件节点的多级索引, 降低性能.
2. 随机选取文件夹, 有两方面的影响:
a. 在文件夹之间切换, 导致文件夹经常不在cache中. 大部分的切换动作, 都要重新读取文件夹信息.
b. 频繁的切换也导致磁盘IO 预取(prefetch)命中率低. 增加磁盘读写数据量. |
|