プログラミング講座(15) 性能測定

プログラムの処理速度を改善する前に、現状がどうなのか調べてみたいと思います。今回リスト5にある時間測定のサブルーチンを追加し、比較的短いv0.3の単語帳プログラムのクロスリファレンスを作ってその時間を測ってみました。結果は以下の図にあるとおり3分41秒でした。
05
【図13 改善前の実行結果】
実行してみて気づくのは行番号付きのプログラムの表示が44行目あたりから、徐々に遅くなっていくことです。行数が増えれば増えるほど遅くなるようです。どこが遅いのか見当がつきますか?
プログラム全体についてはプログラムID XLQ213 で公開してあります。
【リスト5 単語帳プログラム v0.5 変更部分】
1 ‘単語帳プログラム WordList v0.5
2
3 ‘時計開始
4 StartClock()
5 ‘タブの文字コード
6 TAB = 9
7 ‘英文のテキストを入力ファイルとして開く。(Small Basicでは不要)
8 filename = “WordList03.sb”
:
:
42 ‘時計終了
43 StopClock()
44 ‘時計表示
45 PrintClock()
:
:
183 ‘サブルーチン StartClock (時計を開始する)
184 ‘output: begintime
185 Sub StartClock
186 begintime = Clock.ElapsedMilliseconds
187 ems = begintime
188 TextWindow.Write(“Start: “)
189 PrintTime()
190 EndSub
191
192 ‘サブルーチン StopClock (時計を終了する)
193 ‘output: endtime
194 Sub StopClock
195 endtime = Clock.ElapsedMilliseconds
196 ems = endtime
197 TextWindow.Write(“Stop: “)
198 PrintTime()
199 EndSub
200
201 ‘サブルーチン PrintClock (時計を出力する)
202 ‘input: begintime
203 ‘input: endtime
204 ‘work: ems
205 Sub PrintClock
206 ems = endtime – begintime
207 TextWindow.Write(“Time: “)
208 PrintTime()
209 EndSub
210
211 ‘サブルーチン ConvertEmsToTime (Emsを時分秒に変換する)
212 ‘input: ems (elapsed milliseconds)
213 ‘work: hmsms (時分秒ミリ秒)
214 ‘work: msms (分秒ミリ秒)
215 ‘work: sms (秒ミリ秒)
216 ‘output: time[] (時分秒)
217 Sub ConvertEmsToTime
218 hmsms = Math.Remainder(ems, 24 * 60 * 60 * 1000)
219 time[“Hour”] = Math.Floor(hmsms / (60 * 60 * 1000))
220 msms = Math.Remainder(hmsms, 60 * 60 * 1000)
221 time[“Munite”] = Math.Floor(msms / (60 * 1000))
222 sms = Math.Remainder(msms, 60 * 1000)
223 time[“Second”] = Math.Floor(sms / 1000)
224 EndSub
225
226 ‘サブルーチン PrintTime (時刻を出力する)
227 ‘input: ems
228 ‘work: time[]
229 Sub PrintTime
230 ConvertEmsToTime()
231 TextWindow.WriteLine(time[“Hour”] + “:” + time[“Munite”] + “:” + time[“Second”])
232 EndSub
(つづく)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。