[seasar-dev:293] Re: [S2Container] パフォーマンス劣化を引き起こす問題発見
Koichi Kobayashi
koichik @ improvement.jp
2006年 3月 6日 (月) 02:00:08 JST
小林 (koicik) です.
Date: Mon, 6 Mar 2006 01:37:53 +0900
From: "Takanori Suzuki" <szk-micamale @ giga.ocn.ne.jp>
To: <seasar-dev @ ml.seasar.org>
Subject: [seasar-dev:292] [S2Container] パフォーマンス劣化を引き起こす問題発見
> S2Container にパフォーマンス劣化を引き起こす箇所を発見したので、
> ひとまず報告します。
ありがとうございます.
# 実は気づいてはいて,金曜日にこもりさんとも少し話をしたところ
> あるコンポーネントを取得しようとする際に、以下のような処理に
> なるためです。
>
> ・include された dicon は線型検索で解析される。
これは例外があって,検索のキーがコンポーネント名で,
それが名前空間を使っていると名前空間にマッピングされた
コンテナが取得され,そこから名前にマッピングされた
コンポーネントが取得されます.
それでコンポーネントが見つからなかったり,キーが
クラス (型による自動バインディングの場合など) の場合は
線形の総当たりでコンテナを辿ることになりますね.
> 【問題事例】
>
> 例えば、S2DaoMaker を利用すると、
> 1つのDAOに対して以下のような dicon 定義が出力されます。
(中略)
> DAOが100個あるとすると、
> alldao.dicon を include した dicon の内容を解析する際に、
> internalGetComponentDef が300回も実行されることになります。
> → 100(Dao) × 3(MAuthDao.dicon → dao.dicon → j2ee.dicon)
これは厳しい...
> 【修正案】
>
> ・名前空間毎に component の定義を Map で保持するようにする。
そうですね,子のコンテナから見つけたコンポーネントを
キャッシュするようにする必要があるかもしれません.
> ・あるコンポーネントを取得する際に、一度検索した dicon 定義は
> 二度と検索されないようにする。
これは対応したいですね.
実は S2Axis の AxisDeployer では <meta> の付けられた
コンポーネントを検索する際に一度検索したコンテナを
二重に検索しないようになっています.
S2Container でも同じように対応したいと思います.
--
<signature>
<name>Koichi Kobayashi</name>
<e-mail>koichik @ improvement.jp</e-mail>
</signature>
Seasar-dev メーリングリストの案内