当前位置:  开发笔记 > 编程语言 > 正文

为什么Castle Windsor能够抓住瞬态物体?

如何解决《为什么CastleWindsor能够抓住瞬态物体?》经验,为你挑选了1个好方法。

最近我注意到我的应用程序似乎正在吃掉永不释放的内存.在使用CLRProfiler进行分析后,我发现我使用的Castle Windsor容器正在抓住物体.这些对象在config xml中使用lifestyle ="transient"属性声明.

我发现如果我明确调用IWindsorContainer.Release(hangingObject)它会丢弃它的引用.

这引起了一个问题,我并没有想到,对于一个短暂的生活方式对象,CastleWindsor会保留一个引用并有效地创建泄漏.这将是一个相当普通且容易出错的任务,在所有适当的位置插入显式的Release调用.

你有没有看到这个问题,你有什么建议可以解决这个问题吗?



1> Bittercoder..:

我认为这里的答案缺少一个重要的观点 - 这种行为可以通过发布政策开箱即用 - 在这里查看城堡项目网站上的文档.

在许多情况下,特别是在托管应用程序的生命周期中容器存在的情况下,以及真正不需要跟踪瞬态组件的情况(因为您正在处理调用代码或已注入服务的组件中的处理),那么您可以将发布策略设置为NoTrackingReleasePolicy实现并使用它完成.

在Castle v 1.0之前,我相信Component Burden将被实现/引入 - 这将有助于缓解一些这些问题以及处理注入的依赖项等.

编辑:

有关组件负担的更多讨论,请查看以下帖子.

组件负担 - 戴维Brions

此外,组件负担也在Windsor Container 的官方2.0版本中实现.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有