請問大型隨機檔最快的Append方法? |
答題得分者是:syntax
|
gerojeng
一般會員 發表:23 回覆:25 積分:9 註冊:2004-06-19 發送簡訊給我 |
我有一個約 100 MB 的隨機檔案,檔案內一個 record 大小約 30 bytes
如果我只是想在檔案尾端新增幾筆 record , 要怎樣做會比較快呢 ? 我在使用這個檔案為了運算上的效能,一開始會先用 tmemorystream.loadfromfile 把整個檔案載入到記憶體內 這裡也想請問一個觀念上的問題 : 這樣的檔案用 Tfilestream 直接開啟並且進行 Read/ Write 操作,是不是會比用 tmemorystream 差? 是否 tfilestream 呼叫read/write 都會動用到硬碟 ? 還是說其實 tfilestream 自己已經內建一個 tmemorystream ,在開啟檔案的時候 就已經把整個檔案載入到記憶體了? 方法一1 : 呼叫 tmemorystream 的 savetofile 方法 (不知道savetofile的實作方法, 如果是無腦將100mb重寫一次效能應該不高) 方法 2 用 Delphi 內建的函數如 CreateFile / Append/ Write 把新的record 直接寫到檔案最末端 方法 3 用 TFileStream 開啟該100mb檔案然後 Write 新的 record 進去 (聽說 filestream 開檔案 > 2mb 效能會變差是真的嗎?) 請問各位前輩,那種方法會是最快的呢 ? 新手發問請多包涵,觀念上有好多不清楚的地方@@ 那,如果是修改/插入/刪除檔案內其中幾筆的紀錄且要儲存的話,那樣做會比較快呢 ? 這個有點頭痛,直接對tmemorystream記憶體操作刪除或者插入 要用copyform把記憶體搬來搬去感覺效率很差,如果要快速插入/刪除,把整個檔案載入到 TList 裡面去做可能比較快,可是到時候要儲存結果又必須 弄個for一筆一筆的將資料寫入到硬碟,這樣效率好像也不是很高? 要把100多mb另外再載入到TList好像也很耗時間和資源,該怎樣做才好@@? |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
僅是新增,超大檔,建議使用 Memory Mapping File 方式
===================引 用 gerojeng 文 章=================== 我有一個約 100 MB的隨機檔案,檔案內一個 record 大小約 30 bytes 如果我只是想在檔案尾端新增幾筆 record , 要怎樣做會比較快呢 ? 我在使用這個檔案為了運算上的效能,一開始會先用 tmemorystream.loadfromfile 把整個檔案載入到記憶體內 這裡也想請問一個觀念上的問題 :這樣的檔案用 Tfilestream 直接開啟並且進行 Read/ Write 操作,是不是會比用 tmemorystream 差? 是否 tfilestream 呼叫read/write 都會動用到硬碟 ? 還是說其實 tfilestream 自己已經內建一個 tmemorystream ,在開啟檔案的時候 就已經把整個檔案載入到記憶體了? 方法一1 : 呼叫 tmemorystream 的 savetofile 方法 (不知道savetofile的實作方法, 如果是無腦將100mb重寫一次效能應該不高) 方法 2 用 Delphi 內建的函數如 CreateFile / Append/ Write 把新的record 直接寫到檔案最末端 方法 3 用 TFileStream 開啟該100mb檔案然後 Write 新的 record 進去 (聽說 filestream 開檔案 >2mb 效能會變差是真的嗎?) 請問各位前輩,那種方法會是最快的呢 ? 新手發問請多包涵,觀念上有好多不清楚的地方@@ 那,如果是修改/插入/刪除檔案內其中幾筆的紀錄且要儲存的話,那樣做會比較快呢 ?這個有點頭痛,直接對tmemorystream記憶體操作刪除或者插入 要用copyform把記憶體搬來搬去感覺效率很差,如果要快速插入/刪除,把整個檔案載入到 TList 裡面去做可能比較快,可是到時候要儲存結果又必須 弄個for一筆一筆的將資料寫入到硬碟,這樣效率好像也不是很高? 要把100多mb另外再載入到TList好像也很耗時間和資源,該怎樣做才好@@?
編輯記錄
syntax 重新編輯於 2010-04-22 16:30:34, 註解 漏字 [File]‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |