精華區beta Programming 關於我們 聯絡資訊
: 但我發現當我補上 : if( (inValueLength%2) != 0) : { : //Dosomething : } : 所需時間增加為26分鐘 : 等於多跑1萬個if居然會造成時間增加 19% 其實我Dosomething只做了一件事 AnsiString sTagValue; int inValueLength; sTagValue = sReadTag(inTag); inValueLength = sTagValue.Length(); if( (inValueLength%2) != 0 ) inValueLength++; fwrite(sTagValue.c_str(), sizeof(char), inValueLength, fptr); 這樣便會因為加1而把\0寫進檔案 其實我後來想原因也許是出在這吧 我整隻程式除了另寫一個檔案之外 還要把這一萬筆資料複製一份到D:(從C: copy D:) 有於這一萬筆資料加起來將近有6GB 我C:和D:約各30G的大小 跑一次下來22分鐘 我這三天就一直重覆跑程式...殺D:資料 週而復始 也許就是因為這麼頻繁的操作之下 造成硬碟空間產生了不連續的片段之類的 故剛好在這次增加if後 讓我跑出了這種數據 改天重新重組D: 再來跑看看吧 P.S今天有把%2改成&0x01時間仍然無法回到22分鐘 反而比之前的26分鐘還久....XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.115.118.228
HZYSoft:果然是 I/O.... 163.29.223.14 01/26 21:58
tinlans:看看你的 development 有沒有什麼 61.230.220.211 01/26 22:03
tinlans:profiling 工具,類似 GNU 的 gprof 之類 61.230.220.211 01/26 22:03
tinlans:的,不然用 Intel VTune 分析看看到底是啥 61.230.220.211 01/26 22:03
tinlans:問題。 61.230.220.211 01/26 22:04
tinlans:當然在這之前,你可以先目測 asm code。 61.230.220.211 01/26 22:04
meltice:果然是 I/O..... 218.211.11.246 01/26 23:09
meltice:用memory mapped file不知道會不會變快 218.211.11.246 01/26 23:09
HZYSoft:快沒多少.... 163.29.223.14 01/26 23:12
tylpk:其實我有想過..不過目前是要先達到做出來的 59.115.118.228 01/26 23:14
tylpk:要達到標準所規範的.當初考慮用fread 59.115.118.228 01/26 23:15
tylpk:是因為是緩衝式寫法 59.115.118.228 01/26 23:16