解决应用程序服务花费了1秒

时间:2018-11-20 10:34:53

标签: aspnetboilerplate

我们在面向用户的真正产品中使用了abp。而且有api,它很简单,但是它的响应时间约为1秒。我们认为不应该这样,然后我们进行调查,发现应用程序服务方法的执行时间约为100毫秒,并解决了大约1秒钟的应用程序服务。

我们使用IocManager.RegisterAssemblyByConvention(thisAssembly)进行注册。

以下屏幕截图来自日志文件以供调查: enter image description here

我的问题是:

  1. 为什么解析器要花费这么多时间?
  2. 解决此问题的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

之前,我们使用默认的DependencyLifeStyle作为Transient,并进行了一些更改以将DependencyLifeStyle设置为每个请求。现在解决起来是如此之快。

代码更改如下:

public override void PreInitialize()
{
    IocManager.IocContainer.Kernel.ComponentRegistered += Kernel_ComponentRegistered;
}
private void Kernel_ComponentRegistered(string key, IHandler handler)
{
    foreach (var interceptor in interceptors)
    {
        if (interceptor.Key.IsAssignableFrom(handler.ComponentModel.Implementation))
        {
            handler.ComponentModel.Interceptors.Add(new InterceptorReference(interceptor.Value));
        }
    }   
    if (handler.ComponentModel.Implementation.Assembly.FullName.Contains(".Domain"))
    {
        if (handler.ComponentModel.LifestyleType == LifestyleType.Transient)
        {
            IocManager.IocContainer.Register(
            Component
                .For(handler.ComponentModel.Implementation)
                .ImplementedBy(handler.ComponentModel.Implementation)
                .LifestyleCustom<MsScopedLifestyleManager>()
                .IsDefault()
                .Named($"{key}-1")
                );
        }
    }
}