Unity Container IOC высокая загрузка ЦП на серверах - PullRequest
0 голосов
/ 22 октября 2018

Я недавно переключился с структуры карты на Unity.Все было замечательно, пока мы не добрались до производства, когда нагрузка была применена к нашему сайту, и в этот момент процессор взлетел до небес.Переключение обратно на StructureMap решает проблему с процессором, я вижу высокую загрузку процессора только тогда, когда Unity используется в качестве контейнера IOC.

Есть идеи, что может заставить Unity съесть столько процессора?

Ниже мой класс, который выполняет регистрацию и разрешение.Этот класс используется в общем проекте для всех проектов.

namespace Common.Containers
{
  public static class UnityIoc
  {
      private static IUnityContainer _container;

      static Init();
      private UnityIoc()
      {
         _container = new UnityContainer();
         _container.AddNewExtension<Interception>();
      {

       public static void Register<TInterface, TImplementation>()
       {
          if(!_container.IsRegistered<TInterface>())
          {
              _container.RegisterType(typeof(TInterface), 
                typeof(TImplementation));
              try
              {
                  _container.Configure<Interception>()
                      .SetInterceptorFor(typeof(TImplementation), new 
                           VirtualMethodInterceptor());
              }
              catch (Exception e)
              {
                  Logger.Debug($"Unable to add interception see exception: 
                             {e.Message}");
              }
          }
      }
    public static object Resolve(Type type)
    {
        return _container.Resolve(type);
    }     
  }
}

Ниже приведен пример того, что у меня есть в Global.asx.cs

 protected override void Application_Start(object sender, EventArgs e)
 {
    Web.RegisterTypes();
    Service.RegisterTypes();
    Data.RegisterTypes();
 }

Server and Data are both Class Libraries. 

Вот пример того, как выглядят классы регистрации.

public static class Web
{
    public static void RegisterTypes()
    {
       UnityIoc.Register<ISomeInterface, SomeConcreteImplementation >();
      .
      .
      . 
     }
 }

public static class Service
{
    public static void RegisterTypes()
    {
       UnityIoc.Register<ISomeServiceInterface, 
                    SomeServiceConcreteImplementation >();
       .
       .
       . 
     }
}

public static class Data
{
    public static void RegisterTypes()
    {
        UnityIoc.Register<ISomeRepInterface, 
                    SomeRepoConcreteImplementation >();
          .
          .
          . 
     }
}
...