Memory leaks Autofac、Owin和内存泄漏。autofac是否与owin一起泄漏?

Memory leaks Autofac、Owin和内存泄漏。autofac是否与owin一起泄漏?,memory-leaks,asp.net-web-api2,owin,autofac,Memory Leaks,Asp.net Web Api2,Owin,Autofac,最近,我意识到基于Owin和Autofac的Web API应用程序中存在漏洞。泄漏不是永久性的,但内存保留的时间比每个请求的时间长。交易如下: 1-默认情况下,Web API使用缓冲响应,即使在返回响应后,运行时也会将重叠数据结构保留最多40个实例作为对象池。(我想是出于性能原因) 2-每个重叠的数据结构使OWINCOTHEXT保持活动状态(一次仅40个,可能用于池) 3-由于OwinContext处于活动状态,因此每个请求范围的关联Autofac容器保持活动状态,尽管容器本身已被释放 4-即使

最近,我意识到基于Owin和Autofac的Web API应用程序中存在漏洞。泄漏不是永久性的,但内存保留的时间比每个请求的时间长。交易如下:

1-默认情况下,Web API使用缓冲响应,即使在返回响应后,运行时也会将重叠数据结构保留最多40个实例作为对象池。(我想是出于性能原因)

2-每个重叠的数据结构使OWINCOTHEXT保持活动状态(一次仅40个,可能用于池)

3-由于OwinContext处于活动状态,因此每个请求范围的关联Autofac容器保持活动状态,尽管容器本身已被释放


4-即使释放了Autofac容器,它也会将对象保留在其sharedInstances字典中

因此内存泄漏。一种解决方法是使用流而不是缓冲,这样就没有重叠的数据。但我对另一个解决方案很好奇


另一件奇怪的事情是,如果一个Autofac容器被释放,它仍然将数据保存在它的字典中。它应该将字典设置为空!有什么想法吗?

“即使处理了Autofac容器”。你是说每个请求都有一个容器吗?@Steven,是的。正确。您不应该为每个请求创建一个容器。创建容器有很多开销;在内存和CPU中。其中包括注册、表达式树编译、委托生成和JITting。此外,Autofac@Steve,在每次请求时,都会从root创建一个子容器。只有一个全局根。啊,好的。那很好。