【问题标题】:Memory leaks in OpenRasta service when using StructureMap DI使用 StructureMap DI 时 OpenRasta 服务中的内存泄漏
【发布时间】:2012-04-28 20:20:49
【问题描述】:

我们将 OpenRasta 用于提供二进制资源(主要是图像和 PDF)的服务。其中一些相对较大(5-75MB)。我们遇到了性能问题,并且使用 ANTS 内存分析器确定似乎存在内存泄漏。

我们一直在为DI使用StructureMap,在blog post中发现如下修改:

public void HandleIncomingRequestProcessed()
{
    HttpContextLifecycle.DisposeAndClearAll();
}

当我们进行进一步修改时,泄漏消失了:

public void HandleIncomingRequestProcessed()
{
    HttpContextLifecycle.DisposeAndClearAll();
    ObjectFactory.EjectAllInstancesOf<IRequest>();
    ObjectFactory.EjectAllInstancesOf<IResponse>();
    ObjectFactory.EjectAllInstancesOf<ICommunicationContext>();
}

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

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

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

谢谢-

【问题讨论】:

标签: structuremap openrasta


【解决方案1】:

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

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

【讨论】:

  • 我们会调查的。如果有人有任何其他想法,我会将这个问题留得更久一些。谢谢!
  • 好的,所以这最终成为了一个问题。我正在努力更新 SM DependencyResolver 以使用上下文存储,但我对 SM/OR 内部结构的理解不足!如果我想出一些可行的东西,我会提交一个拉取请求。
  • Dave 你能在这个代码副本上运行配置文件,看看它是否修复了吗?我们认为确实如此,但我们不能 100% 确定,因为它相当断断续续github.com/openrasta/openrasta-structuremap/pull/3 谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2013-11-03
  • 2013-08-27
  • 2014-04-19
  • 1970-01-01
相关资源
最近更新 更多