【问题标题】:Reactive Extensions memory usage反应式扩展内存使用情况
【发布时间】:2010-06-14 20:11:39
【问题描述】:

我在 WPF 应用程序中使用 Reactive Extensions for .NET 有以下代码:

public MainWindow()
{
    InitializeComponent();

    var leftButtonDown = Observable.FromEvent<MouseButtonEventArgs>(this, "MouseLeftButtonDown");
    var leftButtonUp = Observable.FromEvent<MouseButtonEventArgs>(this, "MouseLeftButtonUp");

    var moveEvents = Observable.FromEvent<MouseEventArgs>(this, "MouseMove")
        .SkipUntil(leftButtonDown)
        .SkipUntil(leftButtonUp)
        .Repeat()
        .Select(t => t.EventArgs.GetPosition(this));

    moveEvents.Subscribe(point =>
    {
        textBox1.Text = string.Format(string.Format("X: {0}, Y: {1}", point.X, point.Y));
    });
}

当鼠标在此对话框上移动时,内存是否会稳定增加?

阅读代码,我预计 moveEvents observable 将在一段时间后包含大量 MouseEventArgs?或者这是以我不知道的某种聪明方式处理的?

【问题讨论】:

  • 请注意,订阅者仅在订阅后接收新事件,因此旧事件不会保存在任何地方。

标签: c# .net memory-management system.reactive


【解决方案1】:

不,内存使用量不应该稳定增加 - 为什么会这样?事件基本上是流式传输给订阅者的;它们没有在任何地方被缓冲。

Rx 的重点是将事件推送给订阅者,订阅者可以选择如何处理它们。这不像将事件添加到稍后检查的列表中。

(在 Rx 中有缓冲事件的方法,但据我所知,您并没有使用它们。)

【讨论】:

  • 感谢您的回答。在某种程度上回答您的问题“为什么会有?” - 我问是因为我还不明白这是如何工作的。我不清楚 Observable.FromEvent(this, "MouseLeftButtonDown"); 行中发生了什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 2011-08-27
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多