2010-06-14 8 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 observable에 엄청난 양의 MouseEventArgs가 포함될 것이라고 예상합니까? 아니면 내가 잘 모르는 스마트 한 방식으로 처리되는 것입니까?

+0

주, 그래서 이전 이벤트가 없습니다 어디든 지 보관할 수 있습니다. – Gabe

답변

5

아니요, 아니요, 지속적으로 메모리 사용량이 증가해서는 안됩니다. 왜 그런가? 이벤트는 기본적으로 가입자에게 스트리밍됩니다. 그들은 어느 곳에서나 버퍼링되지 않습니다.

Rx의 요점은 이 가입자에게 무엇을 할 것인지를 선택할 수있는 푸시 된 것입니다. 나중에 이벤트를 목록에 추가하는 것과 같지 않습니다.

이 (수신 버퍼링 이벤트의 방법이 있습니다,하지만 당신은 지금까지 내가 말할 수를 사용하지 않을 것입니다.) 가입자는 자신이 구독 한 후로부터 새로운 이벤트를 수신

+0

답변 해 주셔서 감사합니다. 질문에 대해 "왜 그럴 것입니까?"라고 대답하십시오. - 나는 이것이 어떻게 작동하는지 아직 이해하지 못했기 때문에 물었다. Observable.FromEvent (this, "MouseLeftButtonDown"); 줄에서 어떤 일이 발생하는지 분명하지 않습니다. – OneOfAccount