【发布时间】:2013-05-16 03:00:43
【问题描述】:
我注意到在使用 ReactiveUI 的 .NET 3.5 应用程序中,我有一个似乎源自 ObservableAsPropertyHelper 的严重内存泄漏。我创建了一个测试项目来演示它here。
似乎每个由 ObservableAsPropertyHelper 计算的简单属性触发的更改通知都会泄漏内存。泄漏似乎源自 Reactive Extensions,而不是直接源自 ReactiveUI,但我对 OAPH 的使用非常简单,以至于我想知道是否有人遇到过这个问题或可能有建议的修复。
内存泄漏的严重程度因 .NET 3.5(RxUI 2.4、Rx 1.1)和 .NET 4.0(RxUI 4.2、Rx 2.0.3)而异。 .NET 3.5 中属性的每次更新都更接近线性。但是,.NET 4.0 中仍然存在泄漏。
我已经为我的 .NET 3.5 和 .NET 4.0 测试会话上传了测试项目和一些分析器图像,测试应用程序 here。
您可以在图像中看到对象图是不同的,因此我们可能会完全讨论两种不同的泄漏。在 4.0 会话 (40_RetentionGraph.png) 中,您可以看到分配最多的对象是 Ints(我的 OAPH 属性的类型)和 ConcurrentQueue。那里似乎存在某种循环引用问题。您还可以在 40_IntsAllocatedGCRootGrows.png 中看到实例与 GC 根的距离增加了。
在3.5版本(我最关心的)中,可以看到(35_Summary.png)分配最多的对象是Action和ScheduledObserver。对象图比 40 版本稍微复杂一些,完全不同。
我查看了this discussion,但没有找到直接答案:我的情况是,对 OAPH 进行非常简单的更新。对此泄漏的可能解决方案的任何见解表示赞赏。
【问题讨论】:
标签: .net memory-leaks system.reactive reactiveui