- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我注意到在我使用 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 测试 session 与测试应用程序,here .
您可以在图像中看到对象图是不同的,因此我们可能完全在谈论两种不同的泄漏。在 4.0 session (40_RetentionGraph.png) 中,您可以看到分配最多的对象是 Ints(我的 OAPH 属性的类型)和 ConcurrentQueue。那里似乎存在某种循环引用问题。您还可以在 40_IntsAllocatedGCRootGrows.png 中看到实例与 GC 根的距离在增长。
在3.5版本(我最关心的)中,可以看到(35_Summary.png)分配最多的对象是Action和ScheduledObserver。对象图有点复杂,与 40 版本完全不同。
我已审核 this discussion但还没有找到直接的答案:我的情况是,对 OAPH 的更新非常简单。对此泄漏的可能解决方案的任何见解表示赞赏。
最佳答案
您尚未指定调度程序,因此默认情况下 RxUI 将用于 DispatcherScheduler。由于您的应用程序是控制台应用程序,因此没有正在运行的 Dispatcher。所有的内存都被 OnNext 的排队消耗掉了,没有什么可以运行它们。
您可能会搞砸启动调度程序并为其提供帧以运行(WPF 应用程序会为您执行此操作),或者为了进行测试,只需更改 ReactiveTester 构造函数即可:
public ReactiveTester()
{
_Total = this.WhenAny(x => x.A, x => x.B, (a, b) => a.Value + b.Value)
.ToProperty(this, x => x.Total);
}
public ReactiveTester()
{
_Total = this.WhenAny(x => x.A, x => x.B, (a, b) => a.Value + b.Value)
.ToProperty(this, x => x.Total, 0, Scheduler.CurrentThread);
}
关于.net - ReactiveUI ObservableAsPropertyHelper/Reactive Extensions 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16668399/
我的代码在下面,演示站点在这里:http://glimmer.rstudio.com/kdavenport/test1/ 第一个输入(下拉菜单)加载 global.R 中定义的数据框 第二个输入(下拉
我使用了一个可移植模板创建了一个 Xamarin 应用程序,并且我已经在可移植库和 Android 库中安装了响应式(Reactive) UI。但是,当我将应用程序部署到我的手机并导致触发 Raise
我有 WPF 列表框: 我喜欢使用后面的代码按名称绑定(bind) ListBox 的能力:this.OneWayBind(ViewModel, vm
我喜欢 ReactiveUI 的基于代码的绑定(bind)机制。但是,有时您需要使用 XAML 绑定(bind)。在这些情况下,需要在 View 和 ViewModel 之间正确设置 DataCont
在将我的项目中的 Xamarin Forms 包更新到 3.4.0.1009999 后,当使用 ReactiveUI x.DiscountSliderValue).Throttle(TimeSpan.
我正在测试 ReactiveUI,看起来很不错。 但是,我对 MessageBus 有点困惑。 示例代码: var bus = new MessageBus(); int result = -1; b
我无法在设计时在Visual Studio中使用ViewModelViewHost。这是设计使然还是我设置有误? 在我看来,我有: Locator.CurrentMutable.Initializ
我正在将 MvvmCross 与 ReactiveUI 进行比较,用于 Win Store、WP8、iOS、Droid 上的一个主要制药项目。我们已经选择了 Xamarin。 我对 ReactiveU
RX官方博客上有此example: var scheduler = new TestScheduler(); var xs = scheduler.CreateColdObservable(
ReactiveUI.Routing要求我们在Splat容器(Locator.CurrentMutable)中注册 View 。如果我未在Splat中注册,则无法正常工作。 如果我们正在使用其他一些I
所以,当我为我的系统开发新功能时,我也尝试做 TDD - 遗憾的是,现在对于旧功能来说代码太大了。 但是,我发现有时在测试过程中会遇到困难 - 特别是在使用 Delay 和 Throttle 时。 我
所以,当我为我的系统开发新功能时,我也尝试做 TDD - 遗憾的是,现在对于旧功能来说代码太大了。 但是,我发现有时在测试过程中会遇到困难 - 特别是在使用 Delay 和 Throttle 时。 我
我一直在研究在生产代码中使用响应式 UI 的可行性。有些功能确实很吸引人,但我担心依赖这个库。其中包括: 古怪的命名和约定。例如, protected 成员以小写字母开头,而 RaiseAndSetI
我正在将 WPF 应用程序移植到 Windows 应用商店应用程序。我有一些要放入可移植类库的 View 模型。该代码使用 reactui 框架。我创建了库,并使用 nuget 包管理器将 react
我通过 nuget 下载最新的 ReactiveUI (5.0.2) 到我基于 .NET 4.5 的项目。 我创建了具有一个属性的简单 View 模型类: using System; using Sy
在我使用 ReactiveUI 的 WPF 应用程序中,我注意到一个性能不佳的区域。 我有一个 View 模型,其中包含许多其他轻量级 View 模型(想想 30ish)。这些嵌套的 View 模型很
我有一个关于 reactiveui View 模型的问题。 我的 View 模型上有两个属性,月和年,并希望有一个进一步的输出属性 DateLabel,它将两者结合起来并很好地格式化,例如“2015
我查看了许多 ReactiveUI 示例,但我看不到一个很好的简单示例来说明如何处理异常,即应该向用户显示一条消息。 (如果有一个很好的例子,有人可以指点我吗?)。 我的第一个问题是如何使用 Reac
我有一个窗口使用 ReactiveUI Interaction 打开第二个窗口作为模态对话框,然后从第二个窗口中的 ListBox 返回数据。 问题是当 .ShowDialog() 完成时,ViewM
我有一个 WPF MVVM 应用程序。我的模型对象是我可以完全控制的 POCO。这些对象中的某些属性之间存在关系。 例如:假设我有 public class Model { public Ob
我是一名优秀的程序员,十分优秀!