Использование памяти Reactive Extensions - PullRequest
3 голосов
/ 15 июня 2010

У меня есть следующий код в приложении WPF, использующем Reactive Extensions для .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 будет содержать огромное количество MouseEventArgs через некоторое время? Или это обрабатывается каким-то умным способом, о котором я не знаю?

1 Ответ

5 голосов
/ 15 июня 2010

Нет, не должно быть постоянного увеличения использования памяти - с чего бы это?События в основном передаются абоненту;они нигде не буферизируются.

Смысл Rx в том, что события отправляются подписчику, который может выбирать, что с ним делать.Это не то же самое, что добавлять события в список, который затем рассматривается позже.

(Существуют способы буферизации событий в Rx, но вы не используете их, насколько я могу судить.)

...