|
||||||||||||
| 1 2 3 4 次のページ | ||||||||||||
| はじめに | ||||||||||||
|
今回はDI処理のパフォーマンスを見ていきます。DIコンテナのまさにメインとなる機能です。DIは大変便利で魔法のように見えますが、その反面コンテナ内部の処理が見えづらいところでもあります。 |
||||||||||||
| DI | ||||||||||||
|
まずDI時の処理を簡単に説明すると、図1のようになります。 ![]() 図1:DI時の処理 2と3はDIの有無に関わらず行いますので、1と4がDIの処理になります。1については、以下の2つの場合で測定します。
表1:測定のパターン |
||||||||||||
| 測定プログラム(明示的にDIする場合) | ||||||||||||
|
まずは明示的に設定ファイルへ記述した場合から見ていきましょう。コンポーネントとSeasar2での設定ファイルを以下に示します。 設定ファイル(Seasar2)
<components>
コンポーネント(00000〜00999の1,000セット)
public interface Bean00000A {
この設定ファイルのproperty要素で、コンポーネントAへコンポーネントBをセットすることを明示しています。コンポーネントAはコンポーネントBを引数に取るsetterメソッドを持っているため、DIコンテナはsetterメソッドでコンポーネントBをセットします。 今回はコンポーネントAとBを1組として1,000組(2,000個)を記述しています。まずコンテナを生成し、コンポーネントAの数だけ(1,000回)コンポーネントAの方をコンテナから取り出しています。 |
||||||||||||
| 結果(明示的にDIする場合) | ||||||||||||
|
結果は図2、3のようになります。コンテナ生成は2倍近く(2秒ほど)Seasar2の方が速くなりました。コンポーネント取得は同程度です。 ![]() 図2:コンテナ生成(明示的にDIする場合) ![]() 図3:コンポーネント取得(明示的にDIする場合) |
||||||||||||
| 理由(明示的にDIする場合) | ||||||||||||
|
DIを行わない場合(第2回の図1、2,000個の欄)と比べると、どちらのコンテナも遅くなっています。それは以下の理由からだと考えられます。
表2:処理が遅くなった理由 ここでDI処理だけでどれくらい時間がかかるのか気になるところですが、この測定ではコンテナ生成に含まれてしまっているため判別できません。そこでprototypeに注目します。 |
||||||||||||
|
1 2 3 4 次のページ |
||||||||||||
|
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||




