我有 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 秒的额外时间,这是相当多的。为什么?!有没有另一种方法可以让拦截器在没有如此巨大的性能开销的情况下工作?!