2010-06-14 84 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