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