1

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

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

本质上,我想知道,这会搞砸什么吗?还是值得提交的拉取请求?

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

前

后

谢谢-

4

1 回答 1

1

做一个拉取请求。SM 支持很差,并且没有使用上下文存储,因此您会看到问题(以及其他问题)。

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

于 2012-04-17T16:11:28.850 回答