Re: [問題] 檔案 IO 加速一問

看板C_and_CPP (C/C++)作者 (藍影)時間15年前 (2011/02/15 20:27), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
原文恕刪 依您的程式看來,瓶頸似乎是在寫檔時花了不少時間 ( 到時要開文字檔時可能又是另一個問題) 這篇沒什麼偉大的技巧,只是提一點想法出來, 「理論上」在寫檔時應該快些 #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)

02/16 07:09, , 1F
感謝,您的兩篇文章所提及這正是小弟需要的 <(_ _)>
02/16 07:09, 1F

02/16 15:28, , 2F
對了,您的程式我改過再跑後,最後的瓶頸會變讀檔非寫檔
02/16 15:28, 2F
文章代碼(AID): #1DMd50Ip (C_and_CPP)
文章代碼(AID): #1DMd50Ip (C_and_CPP)