كيفية تحسين أداء WinForms MsChart؟
-
22-09-2019 - |
سؤال
لقد أنشأت بعض المخططات البسيطة (من النوع السريع) مع msChart وقم بتحديثها بالبيانات الحية ، كما هو موضح أدناه:
للقيام بذلك ، أقوم بربط مجموعة يمكن ملاحظتها من نوع مخصص للمخطط مثل 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 نقطة في كل سلسلة ، كل ثانية ، ولا تبطئ حقيقي.
لا تنتمي إلى StackOverflow