亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

緩沖文件(用于更快的磁盤訪問)

緩沖文件(用于更快的磁盤訪問)

緩沖文件(用于更快的磁盤訪問)我正在處理大文件,直接寫入磁盤很慢。因為文件很大,我無法在TMemoryStream中加載它。TFileStream沒有緩沖,所以我想知道是否有一個可以提供緩沖流的自定義庫,或者我是否應該只依賴OS提供的緩沖。OS緩沖是否可靠?我的意思是如果緩存已滿,可以從緩存中刷新舊文件(我的)以便為新文件騰出空間。我的文件在GB范圍內。它包含數百萬條記錄。不幸的是,記錄不是固定大小。所以,我必須做數百萬的讀數(4到500字節之間)。閱讀(和寫作)是順序的。我不會上下跳進文件(我認為這是緩沖的理想選擇)。最后,我必須將這樣的文件寫回磁盤(再次寫入數百萬的小寫)。對David Heffernan贊不絕口!David提供了一段很棒的代碼,提供緩沖磁盤訪問。人們你必須擁有他的BufferedFileStream!這是黃金。并且不要忘記upvote。謝謝大衛。   Speed tests:      Input file: 317MB.SFF      Delphi stream: 9.84sec      David's stream: 2.05sec     ______________________________________    More tests:      Input file: input2_700MB.txt      Lines: 19 millions      Compiler optimization: ON      I/O check: On      FastMM: release mode     **HDD**         Reading: **linear** (ReadLine) (PS: multiply time with 10)             We see clear performance drop at 8KB. Recommended 16 or 32KB         Time: 618 ms  Cache size: 64KB.         Time: 622 ms  Cache size: 128KB.         Time: 622 ms  Cache size: 24KB.         Time: 622 ms  Cache size: 32KB.         Time: 622 ms  Cache size: 64KB.         Time: 624 ms  Cache size: 256KB.         Time: 625 ms  Cache size: 18KB.         Time: 626 ms  Cache size: 26KB.         Time: 626 ms  Cache size: 1024KB.         Time: 626 ms  Cache size: 16KB.         Time: 628 ms  Cache size: 42KB.         Time: 644 ms  Cache size: 8KB.      <--- no difference until 8K         Time: 664 ms  Cache size: 4KB.         Time: 705 ms  Cache size: 2KB.         Time: 791 ms  Cache size: 1KB.         Time: 795 ms  Cache size: 1KB.       **SSD**       We see a small improvement as we go towards higher buffers. Recommended 16 or 32KB         Time: 610 ms  Cache size: 128KB.         Time: 611 ms  Cache size: 256KB.         Time: 614 ms  Cache size: 32KB.         Time: 623 ms  Cache size: 16KB.         Time: 625 ms  Cache size: 66KB.         Time: 639 ms  Cache size: 8KB.       <--- definitively not good with 8K         Time: 660 ms  Cache size: 4KB.      ______
查看完整描述

3 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

TFileStream類內部使用CreateFile,它總是使用緩沖區來管理文件,除非你指定的功能FILE_FLAG_NO_BUFFERING標志(注意這直接使用TFileStream的,你不能指定該標志)。有關更多信息,您可以查看這些鏈接

您也可以嘗試使用Primoz Gabrijelcic TGpHugeFileStreamGpHugeFile單元。


查看完整回答
反對 回復 2019-08-26
  • 3 回答
  • 0 關注
  • 681 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號