[Seasar-user:4688] Re: S2ContainerImpl#internalGetComponentDef のsynchronizedについて

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2006年 9月 22日 (金) 20:30:31 JST


小林 (koichik) です.

Date:    Fri, 22 Sep 2006 19:26:11 +0900
From:    "Amatatsu Tetsurou" <[E-MAIL ADDRESS DELETED]>
To:       <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:4686] Re: S2ContainerImpl#internalGetComponentDef のsynchronizedについて

> 天辰です。
> 小林さんからのご質問に回答させていただきます。

ありがとうございました.
今回 S2ContainerImpl#internalGetComponentDef() が
ネックになったのは,呼び出し回数があまりにも多いのが
原因ですね.

>   また、直接的な上記の回答にはなりませんが、上記パターンでの
>    S2ContainerImpl#internalGetComponentDefの呼び出し回数をカウントしたところ結果は以下になりました。
>    ・ログインページ→メインページ間での呼び出し回数:21344
>    ・メインページ→他ページ間での呼び出し回数:200385

これだけ多く internalGetComponentDef() が呼び出されると,
競合も激しくなってしまいます.
internalGetComponentDef() の呼び出し回数が多くなっているのは
おっしゃるように,

> よく調べていないのですなんとも言えないのですがdiconファイルを先頭から何度も線形検索しているように思われます。

ということが原因です.
S2.3 ではコンテナ内に登録されているコンポーネントは
マップから検索しますが,見つからなければインクルードしている
コンテナに順次問い合わせをするため,効率がよくありません.
そのため,小さな dicon ファイルを多数作成するのは
パフォーマンス上不利になります.

この問題については以下でも報告されているので参考までにどうぞ.

http://ml.seasar.org/archives/seasar-dev/2006-March/000290.html


>    DIの設定については以下の通りです。
> 	システム内のdiconファイルの数:325ファイル
> 	システム内のコンポーネント宣言数:840

ということは,1 つの dicon ファイルにコンポーネントが
2〜3 個しか登録されていないようですね.
もう少し dicon ファイルに多くのコンポーネントを登録
するようにして,数を減らしていただいたほうが S2.3 では
無難かもしれません.

まもなくリリースされる S2.3.12 では internalGetComponentDef() の
synchronized は外されますが,大量にインクルードしている
コンテナからコンポーネントを検索するのがあまり効率
よくないことに変わりはないので.

なお,S2.4 ではインクルードしているコンテナに登録
されているコンポーネントもマップで管理するように
なっているため,dicon ファイルの数が多くても
パフォーマンスへの影響はありません.


--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




Seasar-user メーリングリストの案内