AOPのパフォーマンス
S2.NETではRealProxyとDynamicProxyが選択可能なのでパフォーマンスの違いを見てみました。ポイントはDIコンテナの読み込み時間とAOPの割り込みコスト。
こんなサンプルを作成。
using System; using System.Diagnostics; using Seasar.Framework.Container; using Seasar.Framework.Container.Factory; namespace S2ConsoleApplication3 { public interface IMath { int Add (int x,int y); } public class MathImpl : IMath { public int Add(int x, int y) { return x + y; } } public class Program { const string PATH = "App.dicon"; const int LOOP = 100000; static void Main (string[] args) { try { Stopwatch sw = new Stopwatch (); sw.Start(); SingletonS2ContainerFactory.Init (); IS2Container container = SingletonS2ContainerFactory.Container; IMath im = container.GetComponent (typeof (IMath)) as IMath; sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); sw.Reset(); sw.Start(); for (int i = 0; i < LOOP; ++i) im.Add(i, i); sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds.ToString()); } finally { SingletonS2ContainerFactory.Destroy (); } } } } /* RealProxy 676 1821 */ /* DynamicProxy 798 138 */
MathImpl.Add呼び出しに割り込ませています。結果は予想通りRealProxyは実行が遅く、DynamicProxyは起動が遅いです。私が使うのはサーバ側なので起動時に時間が掛かるのは許せそう。DynamicProxyを使おうかな。