我使用JMeter加载到我的WebApi。每个用户100个用户+ 4000循环。
效果图表
我有OWIN自托管的WebApi + Microsoft统一容器。
使用VS性能浏览器,我调查了热路径:
public IDependencyScope BeginScope()
{
var childContainer = Container.CreateChildContainer(); //47% CPU
return new UnityDependencyScope(childContainer);
}
public object GetService(Type serviceType)
{
if (typeof(IHttpController).IsAssignableFrom(serviceType))
{
return Container.Resolve(serviceType); //35% CPU
}
try
{
return Container.Resolve(serviceType);
}
catch
{
return null;
}
}
public void Dispose()
{
Container.Dispose(); //16%CPU
}
如何优化Unity容器的使用或问题在哪里?
答案 0 :(得分:0)
如果您的控制器依赖于太多的构造对象,则可能需要一些时间来构建所有对象图。
对于命中控制器的每个请求,即使您根本不需要任何依赖项,也要实例化所有依赖项。
您可以尝试将一个大型控制器拆分为较小的多个控制器,并重构对象图(依赖关系树)以使每个控制器保持最小值。