2010-06-14 70 views
3

我在使用无扩展的.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可观察将在一段时间后包含大量的MouseEventArgs?或者这是以某种我不知道的聪明方式处理的?

+0

注意,用户只能从他签约后,接收到新的事件,这么老的事件都没有随处可见。 – Gabe 2010-06-14 20:40:55

回答

5

不,不应该有稳定增加的内存使用 - 为什么会有?事件基本上流传给用户;他们没有被缓冲在任何地方。

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

(有处于RX缓冲事件的方式,但你不使用它们,据我可以告诉。)

+0

感谢您的回答。有些回答你的问题“为什么会有?” - 我问,因为我还没有理解这是如何工作的。我不清楚Observable.FromEvent中发生了什么(this,“MouseLeftButtonDown”); – OneOfAccount 2010-06-14 20:44:37