سؤال

لقد أنشأت بعض المخططات البسيطة (من النوع السريع) مع msChart وقم بتحديثها بالبيانات الحية ، كما هو موضح أدناه:

MSCharts Level Chart

للقيام بذلك ، أقوم بربط مجموعة يمكن ملاحظتها من نوع مخصص للمخطط مثل SO:

                // set chart data source
            this._Chart.DataSource = value; //is of type ObservableCollection<SpectrumLevels>

            //define x and y value members for each series
            this._Chart.Series[0].XValueMember = "Index";
            this._Chart.Series[1].XValueMember = "Index";
            this._Chart.Series[0].YValueMembers = "Channel0Level";
            this._Chart.Series[1].YValueMembers = "Channel1Level";

            // bind data to chart
            this._Chart.DataBind(); //lasts 1.5 seconds for 8000 points per series

في كل تحديث ، تتغير مجموعة البيانات تمامًا ، فهي ليست تحديثًا للتمرير!

مع profiler لقد وجدت أن DataBind() يستغرق المكالمة حوالي 1.5 ثانية. المكالمات الأخرى ضئيلة.

كيف يمكنني جعل هذا أسرع؟

  • هل يجب أن أستخدم نوعًا آخر من ObservableCollection؟ صفيف ربما؟
  • هل يجب علي استخدام شكل آخر من ربط البيانات؟
  • هل هناك بعض التعديل لـ MsChart الذي قد فاتني؟
  • هل يجب أن أستخدم مجموعة من التاريخ المتناثر ، مع وجود قيمة واحدة لكل بكسل فقط؟
  • هل وصلت ببساطة إلى حد أداء MsCharts؟

من نوع التطبيق للحفاظ عليه "بطلاقة" ، يجب أن يكون لدينا العديد من التحديثات في الثانية.

شكرا على أي تلميحات!

تحرير: حل كما اقترح ليبي:

                this._Chart.Series[0].Points.Clear();
            foreach (var item in value) //iterates over the list of custom objects
            {
                    this._Chart.Series[0].Points.Add(new DataPoint
                    {
                        XValue = item.Index,
                        YValues = new double[] { item.Channel0Level.Value }
                    });

            }

هذا يعمل الآن أكثر من ضعف السرعة!

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

المحلول

استخدم طرق الربط الأخرى ، فهي سريعة جدًا.

أقوم بتحديث حوالي 15 سلسلة أكثر من 3 مناطق ، مع 300 نقطة في كل سلسلة ، كل ثانية ، ولا تبطئ حقيقي.

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