2010-03-26 33 views
9

Tôi đã tạo ra một số bảng xếp hạng đơn giản (kiểu FastLine) với MSChart và cập nhật chúng với dữ liệu trực tiếp, như dưới đây:Làm thế nào để cải thiện hiệu năng WinForms MSChart?

MSCharts Level Chart

Để làm như vậy, tôi gắn một bộ sưu tập quan sát của một loại tùy chỉnh để bảng xếp hạng như vậy:

   // 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 

Tại mỗi lần làm mới, tập dữ liệu hoàn toàn thay đổi, nó không phải là bản cập nhật cuộn!

Với profiler, tôi nhận thấy rằng cuộc gọi DataBind() mất khoảng 1,5 giây. Các cuộc gọi khác là không đáng kể.

Tôi làm cách nào để thực hiện việc này nhanh hơn?

  • Tôi có nên sử dụng loại khác hơn ObservableCollection không? Một mảng có lẽ?
  • Tôi có nên sử dụng một hình thức ràng buộc dữ liệu khác không?
  • Có một số tinh chỉnh cho MSChart mà tôi có thể đã bỏ lỡ không?
  • Tôi có nên sử dụng một tập hợp ngày tháng bị rải rác, chỉ có một giá trị cho mỗi pixel không?
  • Tôi đã đạt đến giới hạn hiệu suất của MSCharts chưa?

Từ loại ứng dụng để giữ cho nó "thông thạo", chúng tôi sẽ có nhiều lần làm mới mỗi giây.

Cảm ơn mọi gợi ý!

EDIT: Giải pháp theo đề nghị của leppie:

   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 } 
        }); 

      } 

này hiện đang làm việc nhiều hơn gấp đôi nhanh chóng!

Trả lời

5

Sử dụng các phương pháp Bind khác, chúng rất nhanh.

Tôi cập nhật khoảng 15 chuỗi trên 3 khu vực, với 300 điểm trong mỗi chuỗi, mỗi giây và không thực sự chậm lại.

+0

Cảm ơn, tôi sẽ kiểm tra điều này. – Marcel

+1

Tính năng này hoạt động nhanh hơn gấp đôi. Tôi đã thêm nguồn vào câu hỏi. – Marcel

+0

@Marcel: Thực ra tôi có nghĩa là những phương pháp BindXY, nhưng tôi đoán Điểm là như nhau. – leppie

Các vấn đề liên quan