最近在进行程序开发的时候,发现windows写小文件的总速度远小于写大文件的速度。被逼无赖,研究了一下windows的文件管理及磁盘管理相关知识。根据研究过程,写一点自己的看法,还请各位大拿批评指正。
   从操作系统层面来说,当用户要求写文件时,操作系统会首先创建文件目录(其中包含了文件的大小、硬盘中的起始物理地址等信息),而后再将文件具体内容从起始位置开始,写入到硬盘中;
   从磁盘层面而言,在写文件时,磁头首先移动到MFT(这里特指NTFS的主文件表,移动时还需要盘片转动到对应卷上,这里磁头的移动与盘片的移动时间总和,在操作系统上叫存取时间,而真正的写数据的时间叫传送时间——见《操作系统—精髓与设计原理》)中,在其中写入文件头的相关信息;而后再移动到文件起始位置,在其中写入文数据。
   从上面的分析看,系统写文件的时间主要包括两部分,即:写文件头的时间+写具体文件数据的时间。
   对于写小文件与写大文件,在写的数据总大小相同的情况下,小的文件个数将会更多,设大文件个数为一个,对应的小文件个数为n个,由于写一个小文件至少需要两个存取时间与两个传送时间,因而当写n个文件时,将至少需要2n个存取时间与2n个传送时间。而对于大文件由于只需要创建一个文件头,因而就只需要两个存取时间,当然传送时间仍然为2n个,由此可知,存大文件的耗时比小文件短的原因,主要就在于其消耗更少的存取时间。
    如上是我的一点看法,欢迎各位大侠指正!!!

解决方案 »

  1.   

    此外还有较多小文件的话,会有文件对象的反复创建、删除
      

  2.   

    我也比较感兴趣这个  就是针对大量文件 批处理问题 比如说安装软件 要创建大量的小文件 不知道系统底层是否做了优化 我感觉没有吧 没研究过 不敢确定 只是根据平常装软件啥的 判断的  我在想 如果优化做的好了 就是批处理 内存中缓存创建文件 然后批量刷入磁盘 不再是通过系统提供以文件方式的读写磁盘的话 这样是否可以加快速度呢 这样感觉除去解压消耗 速度上 应该能赶上顺序读写大文件吧   反正我是感觉 针对这方面做些优化 还是比较有用的 
      

  3.   

    小文件的话会有文件对象的反复创建、删除?这是测试结论吗?还是实际理论呢?
      

  4.   

    显然:如果做一个大的缓存,而后一次就刷入硬盘的话,速度肯定会快很多,因为这时存储的时间是一个大文件嘛。
      

  5.   

    是的,往U盘里拷贝一个大文件,与 一批同样大小的小文件,就看出来了。
      

  6.   

    回答的兄弟比较少,看样子大家遇见类似的问题较少啊!!