作者tropical72 (藍影)
看板C_and_CPP
標題Re: [問題] 檔案 IO 加速一問
時間Tue Feb 15 20:27:40 2011
原文恕刪
依您的程式看來,瓶頸似乎是在寫檔時花了不少時間
( 到時要開文字檔時可能又是另一個問題)
這篇沒什麼偉大的技巧,只是提一點想法出來,
「理論上」在寫檔時應該快些
#include <string.h>
#define WRITE_LEN 2000 // 定義 buffer 大小
// 恕刪
while (gets(tmp) != NULL) {
for (i = 0; i < 36; i++) {
if (strlen(buffer)+strlen(tmp)+2>=WRITE_LEN){
// 上面要寫 +2 是因為還有 key[i], '\n'
// 等 buffer 放不下的時候再一次性輸出
printf("%s", buffer); // 輸出 buffer 內容
strcpy(buffer, tmp);
// 輸出後再把這次的內容丟到 buffer
}
else {
// 每次讀的時候先放到 buffer 裡面,不要馬上輸出
sprintf(buffer, "%s%s%c\n", buffer, tmp, key[i]);
}
}
}
printf("%s", buffer); // 最後再將 buffer 裡面沒輸出的東西輸出
字串若平均長度以 40 為計算,最後寫檔次數縮了 2000/40 = 50 倍,
這麼做我想會快些。可以再優化的地方不少,像是 sprintf 的傳回值是
那個 buffer 串起後的長度,這樣 strlen(buffer) 這個就可以省掉了。
至於檔案一次寫入太大 不好開,看要不要分多個檔案寫入,
到時再用資料夾列舉檔案的方式去讀每個檔案內容。
這篇用到的技巧,基本上在
#1D9TJ4rN 這裡都有提到
(無奈小弟不懂得什麼叫 "長話短說,只說重點")
如果願意再花個十分鐘的話可以去看看裡面說的東西
。
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.142
※ 編輯: tropical72 來自: 180.177.76.142 (02/15 20:33)
推 xatier:感謝,您的兩篇文章所提及這正是小弟需要的 <(_ _)> 02/16 07:09
→ tropical72:對了,您的程式我改過再跑後,最後的瓶頸會變讀檔非寫檔 02/16 15:28