2010-06-14 4 views
3

J'ai le code suivant dans une application WPF en utilisant Reactive Extensions pour .NET:utilisation de la mémoire Reactive Extensions

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)); 
    }); 
} 

aura-t-il une augmentation constante de la mémoire alors que la souris se déplace sur cette boîte de dialogue?

En lisant le code, je m'attendrais à ce que moveEvents observable contienne une énorme quantité de MouseEventArgs après un certain temps? Ou est-ce géré d'une manière intelligente que je ne connais pas?

+0

Notez qu'un abonné ne reçoit que de nouveaux événements à partir après avoir souscrit, si les anciens événements ne sont pas gardé n'importe où. – Gabe

Répondre

5

Non, il ne devrait pas y avoir une augmentation constante de l'utilisation de la mémoire - pourquoi y en aurait-il? Les événements sont essentiellement transmis à l'abonné; ils ne sont pas tamponnés n'importe où.

Le point de Rx est que les événements sont poussé à l'abonné, qui peut choisir quoi faire avec eux. Ce n'est pas comme ajouter des événements à une liste qui est ensuite examinée plus tard.

(Il y a plusieurs façons d'événements en mémoire tampon Rx, mais vous ne les utilisez pas pour autant que je peux dire.)

+0

Merci pour votre réponse. Pour répondre un peu à votre question "pourquoi y en aurait-il?" - J'ai demandé parce que je n'ai pas encore compris comment cela fonctionne. Ce n'est pas clair pour moi ce qui se passe dans la ligne Observable.FromEvent (this, "MouseLeftButtonDown"); – OneOfAccount

Questions connexes