我们正在使用OpenRasta服务来提供二进制资源(主要是图像和PDF)。其中一些相对较大(5-75MB)。我们遇到了性能问题,并且使用ANTS内存分析器确定出现了内存泄漏。
我们一直在使用StructureMap for DI,并在blog post中找到了以下修改:
public void HandleIncomingRequestProcessed()
{
HttpContextLifecycle.DisposeAndClearAll();
}
当我们进行进一步修改时泄漏消失了:
public void HandleIncomingRequestProcessed()
{
HttpContextLifecycle.DisposeAndClearAll();
ObjectFactory.EjectAllInstancesOf<IRequest>();
ObjectFactory.EjectAllInstancesOf<IResponse>();
ObjectFactory.EjectAllInstancesOf<ICommunicationContext>();
}
编辑:这不是一个好主意,因为它会破坏并发请求。请参阅答案的评论。
基本上,我想知道,这会搞砸吗?或者这是一个值得提交的拉动请求?
以下是分析器的前/后照片:
谢谢 -
答案 0 :(得分:1)
执行拉取请求。 SM支持很差,并且上下文存储未被使用,因此您遇到的问题(以及其他问题)。
那说,不会驱逐IRequest的所有实例删除SM使用的http上下文中的所有实例?您可能需要查看那里的文档。