我有一个简单的界面及其实现:
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)
时,我获得了TransparentProxyInterceptor的~2100滴答,以及InterfaceInterceptor的~5500滴答。
当计算数百万的总和时,拦截器具有几乎相同的性能,尽管MSDN特别says,InterfaceInterceptor比TransparentProxyInterceptor快得多。
答案 0 :(得分:1)
我建议您在拨打Sum()
之前和之后测量呼叫处理程序之外的时间。除此之外:10.000蜱是1ms。我不希望在如此短的时间内进行准确的测量。