當我必須從在C++程序大(2GB)二進制文件中讀取的二進制數據轉換成char陣列。第一次從我的SSD讀取文件時,每個文件讀取大約需要6.4秒。但是,當再次運行相同的代碼時,或者甚至在運行一個不同的虛擬程序之後,下一個讀數每個文件只需要大約1.4秒。 Windows任務管理器甚至在第二,第三,第四...次運行中顯示出更少的磁盤活動。所以,我的猜測是Window的文件緩存讓我無法再等待SSD中的數據,因爲再次填充陣列時。極限性能差,讀取相同的文件的第二時間以C
有沒有乾淨的選項將文件讀入文件緩存的客戶運行該軟件之前?任何更好的選擇,而不是已經提前用fread加載文件?我怎麼能確定,數據一直保存在文件緩存中,直到我需要它爲止?
還是我完全錯了我的文件緩存假設?對於這些不同的加載時間是否有另一個(更好的)解釋?
非常感謝您的幫助! 我們的想法很相似。但是https://msdn.microsoft.com/de-de/library/windows/desktop/aa364218(v=vs.85).aspx聲稱設置標誌FILE_FLAG_NO_BUFFERING會禁用文件緩存。但是當使用HANDLE hFile = CreateFileW(wFilename.c_str(),GENERIC_READ,0,0,OPEN_EXISTING,\t FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING | FILE_FLAG_OVERLAPPED,\t 0); 時間行爲(首次加載速度慢,後續加載速度加快5倍)仍然保持不變!?!?這怎麼符合我們的文件緩存假設?感謝您的任何想法, Jürgen – juergen861
可能是古怪的操作系統行爲,一個微妙的執行錯誤,您的代碼的其他部分干擾或其他正在運行的應用程序干擾。另外:請記住,硬盤和固態硬盤可能(通常是)具有超出操作系統控制的內部緩衝區。 –