对于一个webapp,“InSingletonScope”到底有多长?

时间:2012-12-18 09:54:14

标签: c# asp.net-mvc-4 ninject

我刚刚用Ninject.Mvc3 NuGet软件包弄湿了,我想知道创建的对象有多长时间了。

每个人都明白

InRequestScope:只要网络服务器处理特定的网络请求,在此范围内创建的每个对象都会存在。 (为了迂腐,只要HttpContext.Current对象存在,对象就会存在)

但是InSingletonScope对象持续多长时间?文档说只要Ninject Kernel本身也可以 - 它包含在NinjectWebCommon静态类中。到目前为止,我做的最好的猜测是,只要服务器运行webapp,内核就会存在 - 只要服务器启动,直到在IIS中手动重新启动应用程序或更新,对象就在范围内。

我很好奇,因为我很想让一些包含只读数据字典的数据访问器作为Singleton Scope,我想知道这是一个好主意,还是计划中的内存泄漏。

2 个答案:

答案 0 :(得分:4)

只要您的ASP.NET应用程序池持续,它就会持续。

您的应用程序池何时回收?有许多设置可以控制这一点:阅读Configuring Recycling Settings for an Application Pool (IIS 7)

但基本上,它不会永远存在:如果你想在那里存储只读数据,只需确保在Application_Start()中加载所有数据,以便在请求进入时准备就绪,并且你应该好好去。

答案 1 :(得分:2)

你是对的。只要应用程序池正在运行,您的单身人士就会活着。为什么您可能想要关闭应用程序池回收。

对于我的大多数网站,我将设置缓存在静态类中(或使用Ninject或StructureMap作为单例),以及线程安全词典中的数据。这当然会消耗内存,但它不是内存泄漏。按设计工作。