在我的應用程序中,我需要在大文件(大約2-7 GB)內每隔大約50ms連續寫入數據塊(大約2MB)。這是以順序循環的方式完成的,所以我把chunk寫入文件之後,當我在文件結尾處時,我從頭開始重新開始。在HDD上高效連續數據寫入
目前我做如下:
在C#我打電話File.OpenWrite
一次打開具有讀取權限的文件,並與SetLength
設置文件的大小。當我需要寫一個塊時,我將安全文件句柄傳遞給非託管的WriteFile
(kernel32.dll)。因此,我傳遞了一個重疊結構來指定塊必須被寫入的文件內的位置。我需要寫的塊存儲在非託管內存中,所以我有一個IntPtr
,我可以將它傳遞給WriteFile
。
現在我想知道是否以及如何讓這個過程更有效率。有任何想法嗎?
詳細一些問題:
- 將文件I/O更改爲內存映射文件的幫助?
- 我可以爲NTFS包含一些優化嗎?
- 創建我缺少的文件時是否有一些有用的參數? (可能是具有特殊參數的非管理呼叫)
是否有一個要求指定每n毫秒寫入數據?您可以緩衝數據並每n秒寫入一次。與非緩衝型(50ms - 12ms = 38ms,52MB/s)相比,這樣可以縮短訪問時間(1000ms - 12ms =剩餘時間約爲998ms,以約40MB/s寫入)。 – Caramiriel
據我所知,文件寫入已被系統緩存。然而,與我目前的實施相比,檢查一下像您所建議的更大的緩衝區如何執行可能會很有趣。這尤其是因爲我無法控制I/O緩存的大小以及如何處理緩存。 –