Разрешить службу приложений потратил 1 секунду - PullRequest
0 голосов
/ 20 ноября 2018

Мы используем ABP в самом продукте для пользователя.И есть API, это так просто, но время отклика составляет около 1 секунды.Мы думаем, что это не должно быть, затем мы исследуем это, обнаруживаем, что время выполнения для метода службы приложений составляет около 100 мс, и решаем, что служба приложений тратит около 1 секунды.

Мы используем IocManager.RegisterAssemblyByConvention (thisAssembly) для регистрации.

Следующий скриншот из файла журнала для расследования: enter image description here

Мои вопросы:

  1. , почему распознаватель потратил так многовремя?
  2. Как правильно решить эту проблему.

1 Ответ

0 голосов
/ 06 декабря 2018

Раньше мы использовали 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")
                );
        }
    }
}
...