我们使用 OpenRasta 来提供二进制资源(主要是图像和 PDF)。其中一些相对较大(5-75MB)。我们遇到了性能问题,并且使用 ANTS 内存分析器确定似乎存在内存泄漏。
我们一直在为 DI 使用 StructureMap,在一篇博文中发现了以下修改:
public void HandleIncomingRequestProcessed()
{
HttpContextLifecycle.DisposeAndClearAll();
}
当我们进行进一步修改时,泄漏消失了:
public void HandleIncomingRequestProcessed()
{
HttpContextLifecycle.DisposeAndClearAll();
ObjectFactory.EjectAllInstancesOf<IRequest>();
ObjectFactory.EjectAllInstancesOf<IResponse>();
ObjectFactory.EjectAllInstancesOf<ICommunicationContext>();
}
编辑:这不是一个好主意,因为它会弄乱并发请求。请参阅答案的评论。
本质上,我想知道,这会搞砸什么吗?还是值得提交的拉取请求?
以下是分析器的前后照片:
谢谢-