グラフィックスのパフォーマンス
最終更新日:

下の3つのアプレットは同じフラクタルを異なる描画方法で表示するものです。

MemoryImageSource と グラフィックス関数の差
種類 最大計算回数
MemoryImageSourcedrawLine関数
計算終了まで描画なし途中経過を描画
一括計算分割計算(50分割)
Applet 1Applet 2Applet 3Applet4

Applet1
これは前のページの Fractal アプレットで noWait=true に設定したもので、 計算開始から完了までの間は途中経過を描画せず完了後に全てを描画するものです。 イメージは MemoryImageSource を使用してピクセル配列に直接描画する方式です。

Applet2
これも前のページの Fractal アプレットで noRepaint=true に設定したもので、 描画は行ないませんが計算を 50分割 して、各分割間を yield() 関数で割込み受付をしています。 イメージは Applet1 と同様に MemoryImageSource を使用してピクセル配列に直接描画する方式です。

Applet3
これは前のページの Fractal アプレットそのもので、 計算開始から完了までの間を 50分割 して、各分割間の途中経過を描画するものです。 イメージは Applet1 と同様に MemoryImageSource を使用してピクセル配列に直接描画する方式です。

Applet3
これは基本的な処理は Applet3 と同じですが、 前の2つの描画とは異なり、 描画方式を1つのオフスクリーンイメージに グラフィック関数 drawLine を使用して描画する方式です。

実行結果
私のマシン(Windows95 + Pentium100MHz + Netscape Communicator4.04)では 以下の数値がでました。

実行結果
AppletApplet1Applet2Applet3Applet4
時間(sec)0.20.31.94.2

実行結果の数値を見るまでもなく、 グラフィック関数を使用するより MemoryImageSource を使用する方が、 途中経過を表示するよりしない方が、 スレッドスイッチングをするよりしない方が 実行時間が短いことが判ります。

然し、だからといって Applet1 が優れていることにはなりません。 計算途中の割込みを受付けるためにはスレッドスイッチングが必要ですし、 要求してから長時間何も変化がないのもユーザにとって見れば不親切です。 また、MemoryImageSource を使用するにも向き不向きがあるので、 アプレットの処理内容で決定すべきです。


(C)Copyright 1997 ShinSoft.
All rights reserved.