我有n层应用程序,其中“WCF REST服务应用程序”位于顶部。出于性能考虑,上下文模式是PerCall,如下所示
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
我也有一个Intercept(Castle.Core)用于记录目的,方法如下:
实施:
public static readonly ProxyGenerator generator = new ProxyGenerator();
public static T Create<T>(object target, ILog log)
{
return (T)generator.CreateInterfaceProxyWithTarget(typeof(T), target, new LoggingInterceptor(log));
}
private class LoggingInterceptor : IInterceptor
{
...
}
拦截器:
IUserHandler handler = ObjectFactory.Create<IUserHandler>(new UserHandler(), log);
handler.GetUsers();
通过使用拦截器,每个方法调用都有大约0.3个额外的秒,这是非常多的。为什么?!有没有另一种让拦截器工作的方法没有如此巨大的性能开销?!