У меня простой интерфейс и его реализация:
public interface ICalculator
{
long Sum(int ceiling);
}
public class Calculator : ICalculator
{
public long Sum(int ceiling)
{
long sum = 0;
for (long i = 1; i <= ceiling; i++)
{
sum += i;
}
return sum;
}
}
Вызов обработчика для измерения времени расчета:
public class MyCallHandler : ICallHandler
{
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
var result = getNext()(input, getNext);
stopwatch.Stop();
Trace.WriteLine(stopwatch.ElapsedTicks, "Benchmark");
return result;
}
public int Order { get; set; }
}
Контейнер Unity настроен следующим образом:
IUnityContainer unityContainer = new UnityContainer();
unityContainer.RegisterType<ICalculator, Calculator>();
unityContainer.AddNewExtension<Interception>();
unityContainer.Configure<Interception>().AddPolicy("MyPolicy")
.AddMatchingRule(new MemberNameMatchingRule("Sum"))
.AddCallHandler<MyCallHandler>();
unityContainer.Configure<Interception>().SetInterceptorFor<ICalculator>(new TransparentProxyInterceptor());
Когда я звоню unityContainer.Resolve<ICalculator>().Sum(80000)
, я получаю ~ 2100 тиков для TransparentProxyInterceptor и ~ 5500 тиков для InterfaceInterceptor.
Когда вычисляется сумма в миллионах, перехватчики имеют почти одинаковую производительность, хотя MSDN, в частности, говорит , что InterfaceInterceptor намного быстрее, чем TransparentProxyInterceptor.