首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

ZedGraph 動態即時圖表實作:高效能股市走勢、CPU 監控圖的關鍵技巧

     編輯:關於.NET

ZedGraph 採用直接繪圖而非生成圖片,效能遠優於傳統圖表控制項,極適合股市即時走勢、CPU 使用率等高頻更新場景。本文示範核心實作模式與效能優化關鍵。

核心資料結構

  • PointPairList:儲存 (X, Y) 座標點集合,繪圖引擎直接讀取。
  • LineItem:代表一條曲線,綁定 PointPairList。

初始化與預填資料

Random rnd = new Random();
PointPairList list = new PointPairList();
LineItem curve;

private void Form_Load(object sender, EventArgs e)
{
    zedGraph.GraphPane.Title.Text = "動態折線圖";
    zedGraph.GraphPane.XAxis.Title.Text = "時間";
    zedGraph.GraphPane.YAxis.Title.Text = "數量";
    zedGraph.GraphPane.XAxis.Type = AxisType.DateAsOrdinal;

    // 預填 100 筆歷史資料 (或填 0 形成「從零開始」效果)
    for (int i = 0; i <= 100; i++)
    {
        double x = (double)new XDate(DateTime.Now.AddSeconds(-(100 - i)));
        double y = rnd.NextDouble(); // 或 y = 0 形成空白起始
        list.Add(x, y);
    }

    curve = zedGraph.GraphPane.AddCurve("My Curve", list, Color.DarkGreen, SymbolType.None);
    zedGraph.AxisChange();
    zedGraph.Refresh();
}

定時器驅動即時更新

private void timer_Tick(object sender, EventArgs e)
{
    zedGraph.GraphPane.XAxis.Scale.MaxAuto = true; // 自動捲動 X 軸
    double x = (double)new XDate(DateTime.Now);
    double y = rnd.NextDouble();
    list.Add(x, y);

    // 維持固定視窗大小 (例如 100 點)
    if (list.Count >= 100) list.RemoveAt(0);

    zedGraph.AxisChange();
    zedGraph.Refresh();
}

效能關鍵:SymbolType.None

關閉資料點符號 (圓形、方形、菱形等) 可大幅降低繪圖負擔。實測環境 (Celeron 1.7GHz/512MB) 下:

  • SymbolType.None:流暢渲染 10,000 點無明顯卡頓。
  • SymbolType.Diamond:2,000 點即出現嚴重停頓。

股市盤中 4 小時、每 10 秒更新 → 1,440 點,ZedGraph 完全勝任。

動態折線圖初始畫面 SymbolType.Diamond 效能對比

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved