看板 C_and_CPP 關於我們 聯絡資訊
原文恕刪 依您的程式看來,瓶頸似乎是在寫檔時花了不少時間 ( 到時要開文字檔時可能又是另一個問題) 這篇沒什麼偉大的技巧,只是提一點想法出來, 「理論上」在寫檔時應該快些 #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