服务器上看到的Unity Container IOC高CPU

时间:2018-10-22 18:24:52

标签: inversion-of-control unity-container

我最近从结构图切换为Unity。直到我们投入生产时,所有负载都是桃花心木,这时CPU猛增。切换回StructureMap可解决CPU问题,只有将Unity用作IOC容器时,才能看到较高的CPU使用率。

有什么主意会导致Unity消耗太多CPU?

下面是我的课程,负责注册和解决。在所有项目中的一个公共项目中共享此类。

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 >();
          .
          .
          . 
     }
}

0 个答案:

没有答案