作者tylpk (tylpk)
看板Programming
標題Re: [問題] if所增加的處理時間
時間Fri Jan 26 21:56:51 2007
: 但我發現當我補上
: 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