回覆列表
  • 1 # 使用者8393038205506

    複製檔案在應用層次上的過程是:把原始檔讀到記憶體裡,把記憶體裡的資料寫到目標檔案裡。要理解為什麼越來越慢,就要從這兩步來分析。先說把原始檔讀到記憶體裡這一步,從使用者層面來看,用來做資料中轉的記憶體是固定大小的,所以不存在快慢的問題。但在檔案系統驅動一層,則不是這樣的。當你用Windows資源管理器開啟一個資料夾,或者在Linux裡cd到某個路徑的時候,這個資料夾裡很多資訊可能已經被讀到記憶體裡了,這種技術簡單的說,是“預讀”,當然實際情況比較複雜,不同的檔案系統的操作策略是不同的,但基本上一個實時就是,在你準備複製這個檔案之前,這個檔案的部分資訊已經在記憶體裡了。這些資訊裡,最重要的就包括檔案的索引塊資訊。索引塊是用來標識你的檔案在磁碟上如何分佈的,如果把磁碟理解成一個帶有很多格子的本子,那麼索引塊就是用來記錄哪些格子屬於哪些檔案的。要訪問檔案,索引塊是必須要訪問的。而對於一個大檔案來說,其索引也是不小的,當你剛開始複製檔案的時候,因為有“預讀”存在,所以此時的複製有很多磁碟訪問操作已經可以省略,直接從記憶體裡拿就可以了,速度是很快的。但隨著你操作的繼續,“預讀”被用完了,那麼只能直接訪問磁碟,此時讀檔案的速度就下降了,這是複製大檔案越來越慢的一個原因之一。再說把記憶體裡的資料寫到目標檔案裡這一步。一般來說檔案系統只有預讀,但沒有“預寫”,但是裝置本身和裝置驅動都是有“快取”概念的,隨便到網上查一個硬碟的資訊,都會有“XXM快取”,這快取有些就是用來做寫操作的,主機上傳送過來的資料,先放到快取裡,然後慢慢寫,快取的速度基本和記憶體速度相當,所以一開始快取沒滿的時候,寫的是很快的,但是此時資料未必真的就寫到磁碟上。但是隨後,快取滿了,速度就下降了。快取也是導致寫速度慢慢下降的一個原因之一。其實,寫檔案也是要伴隨著讀操作的,因為如果要寫入資料,先要讀一下磁碟的索引塊,確定哪些區域是空白的,不然的話就會把舊資料寫壞。隨著寫的資料增多,讀的東西就要更多,另外像ext和NTFS這種,都有機制保證掉電時檔案系統不會被嚴重損壞,原理就是Copy On Write機制,就是我要寫某個資料的時候,我先複製一份,這樣即使突然斷電,資料的原始內容是可以恢復的。可是這樣的話,麻煩就來了,如果寫的東西很多,Copy的東西就更多,Copy也要消耗記憶體,最終的結果就是記憶體越佔越多,也加劇了寫操作時的速度下降。Copy On Write和寫檔案時伴隨的讀操作,也是速度慢慢下降的原因之一。以上三種原因導致了寫檔案速度越來越慢。同時,有些檔案系統(比如NTFS),其索引塊的建立是有延遲性的,一般是先寫一些資料,再建立對應的索引,那麼可能剛開始寫資料的時候,不需要建立索引塊(或者索引塊建立在記憶體裡),但後來除了要寫資料,還要寫索引,寫的速度就下降了。甚至有些大檔案的索引是最後才建立的,這種情況下會出現檔案的最後一小部分(比如最後1M)會寫的特別慢,因為此時在更新檔案索引資訊。

  • 2 # 使用者1677478841503

    操作方法:

    2,每三個月左右(視你使用電腦的頻率而定)清空Windows的預讀取資料夾(Windows\Prefetch)一次。Windows把頻繁使用的資料存放在預讀取資料夾中,需要再次使用這些資料時就可以大大加快讀取速度。但時間一長,這個資料夾中就會有大量不再使用的垃圾資料存在,反而增加了Windows的讀取時間,影響了系統性能。

  • 中秋節和大豐收的關聯?
  • 雙耳輕度聽損雙耳配戴助聽器好還是單耳好?