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();
}
關閉資料點符號 (圓形、方形、菱形等) 可大幅降低繪圖負擔。實測環境 (Celeron 1.7GHz/512MB) 下:
SymbolType.None:流暢渲染 10,000 點無明顯卡頓。SymbolType.Diamond:2,000 點即出現嚴重停頓。股市盤中 4 小時、每 10 秒更新 → 1,440 點,ZedGraph 完全勝任。
