Performance 林浮国际奥委会在高流量网站上的最佳实践

Performance 林浮国际奥委会在高流量网站上的最佳实践,performance,inversion-of-control,linfu,Performance,Inversion Of Control,Linfu,我们正处于建立一个流量相当高的网站(每周约600万页面浏览量)的最后阶段,并将LinFu用作新架构中的IoC容器 我们有一个相当标准的设置: Web Layer | IServices <- Services Implementation | IDataRepository <- DataRepository Implementation | DataBase (同样,DataRepository类也具有类似的功能) 目前我们将生命周期类型保留为默认类型(我相信这是PerRe

我们正处于建立一个流量相当高的网站(每周约600万页面浏览量)的最后阶段,并将LinFu用作新架构中的IoC容器

我们有一个相当标准的设置:

Web Layer
 |
IServices <- Services Implementation
 |
IDataRepository <- DataRepository Implementation
 |
DataBase
(同样,DataRepository类也具有类似的功能)

目前我们将生命周期类型保留为默认类型(我相信这是PerRequest)

我的主要问题是:

IWeatherServices
{
    Weather GetForecast();
    Weather GetPrediction();
}

[Implements(typeof(IWeatherServices))
WeatherServices(IWeatherForecastRepository, IWeatherPredictionRepository) : IWeatherServices
{
    // implementation of methods
}
  • 我们是否应该将ServiceContainer保持为web应用程序中的一个单例
  • 实现类上的LifecycleType是否应保留为默认值

我知道这有点开放,但我们正在负载测试期间进行调整,因此我对总体观点非常感兴趣。

拥有一个容器实例(因此是一个单实例)是一件非常常见的事情。但是,请防止在整个应用程序中调用它。相反,使用构造函数注入,让容器只解析最顶层的对象。从你的例子来看,我相信你已经做到了

短暂的生活方式(每次调用容器时创建一个新实例)是最简单的事情,通常也是最安全的事情。多线程导致的竞争条件变化最小。另一方面,这是表现最差的生活方式


你应该改变生活方式吗?如果你的申请足够快,我就不必麻烦了。如果速度不够快,你应该看看将服务转向单身生活是否有任何影响。换句话说,请遵循以下性能:度量、度量、度量、度量、度量、度量、度量、度量、度量、度量和度量:-)

如果您没有使用LinFu的自动字段/属性/方法注入功能,您可以尝试:

container.DisableAutoPropertyInjection();
container.DisableAutoMethodInjection();
container.DisableAutoFieldInjection();

这将大大提高LinFu容器的性能,因为它不必经常检查字段、属性和自动注入方法

谢谢你的回复。我们正在测试配置的变化,但知道我们并没有做任何根本错误的事情是非常令人放心的。干杯为什么这个问题被否决了?投票人想解释原因吗?太好了,谢谢你的提示!该网站昨天上线,除了在一台服务器上出现一些奇怪的错误外,似乎表现良好,但我认为我们能够找到问题的根源。酷。如果您还需要什么,请在marttub(签名)hotmail(网站)与我联系。