استخدام الذاكرة الإضافات التفاعلية
-
27-09-2019 - |
سؤال
لدي الرمز التالي في تطبيق 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 ، لكنك لا تستخدمها بقدر ما أستطيع أن أقول.)
لا تنتمي إلى StackOverflow