为什么InterfaceInterceptor不比TransparentProxyInterceptor快

本文关键字:TransparentProxyInterceptor 不比 InterfaceInterceptor 为什么 | 更新日期: 2023-09-27 18:22:02

我有一个简单的接口及其实现:

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特别指出InterfaceInterceptor比TransparentProxyInterceptor快得多。

为什么InterfaceInterceptor不比TransparentProxyInterceptor快

我建议在调用Sum()之前和之后测量调用处理程序之外的时间。除此之外:10000个刻度是1ms。我不希望在这么短的时间内进行准确的测量。

相关文章:
  • 没有找到相关文章