|
||||||||||||
| 前のページ 1 2 3 4 次のページ | ||||||||||||
| 測定プログラム(自動でDIする場合) | ||||||||||||
|
次は自動DIについて見てみましょう。自動DIにはいくつかの種類がありますが、ここでは型によるDIを測定します。コンポーネントは「明示的にDIする場合」と同じものを使用します。Seasar2での設定ファイルは以下のようになります。 設定ファイル(Seasar2)
<components>
明示的なDIの際には設定されたproperty要素が、省かれています。省いた箇所に相当する情報を、DIコンテナはコンポーネントのリフレクション情報から取得するわけです。 |
||||||||||||
| 結果(自動でDIする場合) | ||||||||||||
|
コンポーネント取得速度は同程度ですが、コンテナ生成はSeasar2の方が3倍程速い(差は5秒と大きめ)結果となりました。また、明示的にDIしたときと比べると、Springのコンテナ生成速度が3秒ほど遅くなっていることがわかります。 ![]() 図8:コンテナ生成(自動でDIする場合) ![]() 図9:コンポーネント取得(自動でDIする場合) |
||||||||||||
| 理由(自動でDIする場合) | ||||||||||||
|
自動DIにしたことでSeasar2は速度にあまり変わりがありませんが、Springはコンテナ生成が極端に遅くなっています。その理由はDI対象を探すロジックにあります。 SpringはDIのたびにコンテナへ登録されているすべてのコンポーネントへアクセスします。今回はコンテナへ2,000個登録されていて1,000回DI処理をしているので、「2,000個 × 1,000回」コンポーネント定義へアクセスしていることになります。 それに対してSeasar2は、コンテナへコンポーネントを登録する際にクラスの型をキーとするハッシュテーブルへ登録しているため、DI処理の際に1回のアクセスで済んでいます。つまりリスト全件へアクセスするのか、ハッシュテーブルへキーでアクセスするのかの差なので、この結果にも納得できます。 |
||||||||||||
|
前のページ 1 2 3 4 次のページ |
||||||||||||
|
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||



