使用StructureMap DI时,OpenRasta服务中的内存泄漏

时间:2012-04-17 13:25:40

标签: structuremap openrasta

我们正在使用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>();
}

编辑:这不是一个好主意,因为它会破坏并发请求。请参阅答案的评论。

基本上,我想知道,这会搞砸吗?或者这是一个值得提交的拉动请求?

以下是分析器的前/后照片:

Before

After

谢谢 -

1 个答案:

答案 0 :(得分:1)

执行拉取请求。 SM支持很差,并且上下文存储未被使用,因此您遇到的问题(以及其他问题)。

那说,不会驱逐IRequest的所有实例删除SM使用的http上下文中的所有实例?您可能需要查看那里的文档。