LRU文件缓存和在Windows目录中查找文件的成本

时间:2010-10-07 20:30:06

标签: .net windows performance filesystems

我有一个应用程序,它将至少下载和缓存250,000个8KB *文件,总计大约2GB。我需要在更新此缓存时删除最近最少使用的文件。 *这些小文件跨越两个4KB扇区。

在NTFS格式的5400 RPM驱动器上的目录中,通过名称获取此类型文件的文件句柄的相对成本是多少?如果我将所有200K文件存储在一个目录中只是获取文件句柄需要花费几毫秒?我可以轻松地将文件存入不同的目录。

Windows 7默认禁用文件的上次访问时间,我不想要求管理员启用此功能。我应该在内存中保留单独的文件访问时间列表(当应用程序退出时序列化为磁盘?)

我应该考虑将这些文件存储在一个大的平面文件中吗?如果我使用比.NET 4.0更早的东西

,内存映射可能会很困难

2 个答案:

答案 0 :(得分:1)

平均5400rpm驱动器的一次搜索约为15ms。相比之下,其余的都是微不足道的。

答案 1 :(得分:1)

打开250,000个文件 - 如果这就是你的意思 - 将花费超过几毫秒,是的。目录的大小不像你经历整个文件系统堆栈250,000次(从NTFS,内核和你祖母最喜欢的反病毒过滤器都必须有机会玩)的事实。

无论如何,最后的访问时间并非坚如磐石。