سؤال

لدي الرمز التالي في تطبيق WPF باستخدام ملحقات تفاعلية لـ .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));
    });
}

هل ستكون هناك زيادة ثابتة في الذاكرة أثناء تحريك الماوس في مربع الحوار هذا؟

عند قراءة الكود ، أتوقع أن تحتوي الخطوات التي يمكن ملاحظتها على كمية هائلة من mouseeventargs بعد فترة من الوقت؟ أم أن هذا يتم التعامل معه بطريقة ذكية لا أدري بها؟

هل كانت مفيدة؟

المحلول

لا ، لا ينبغي أن تكون هناك زيادة ثابتة في استخدام الذاكرة - لماذا سيكون هناك؟ يتم بث الأحداث بشكل أساسي إلى المشترك ؛ إنهم لا يتم تخزينهم في أي مكان.

الهدف من RX هو أن الأحداث دفعت للمشترك ، من يمكنه اختيار ما يجب فعله معهم. لا يشبه إضافة الأحداث إلى قائمة يتم فحصها لاحقًا.

(هناك طرق للتخزين المؤقت في RX ، لكنك لا تستخدمها بقدر ما أستطيع أن أقول.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top