5

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

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?或者这是以我不知道的某种聪明的方式处理的?

4

1 回答 1

8

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

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

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

于 2010-06-14T20:31:19.860 回答