Winform 程式中時常會使用到圖表, 在微軟官方提供的工具中, 有一個Chart的GUI類別可以使用(參考), 操作Chart過程中一定可以發現, 這跟Excel中所用的圖表非常相似! 沒錯, Chart就是一直以來微軟提供的圖表工具, 可以讓客戶快速地呈現X軸、Y軸的資料圖形, 並且提供很多呈現的選項跟功能讓客戶可以自由變換圖形格式。因此Chart的強大在於得到數據後呈現的多樣性跟用戶操作的彈性, 但是測試測量的操作過程中, 我們的數據一直不斷更新產生, 我們需要的是一個能夠以高效率接收數據的GUI工具, 在這方面Chart的效能是比較低的。Chart工具無法便利提供測試測量領域的幾個重點
數據量龐大的時候, 更新、執行效率很低
添加資料不容易, 測試測量的數據有時候以Y-T圖形, 有時候以X-Y散布圖, 用戶得自行設計邏輯將資料帶入Chart
用戶互動操作的功能全部需要開發者自己撰寫, 非常耗時
台灣簡儀科技自行研發了針對測試測量的高效能圖表, 稱為EasychartX。當數據龐大的時候, 執行效率可以比Chart好10倍以上;並且內建了滑鼠操作的右鍵選單, 可以直接進行圖表變更; 在程式操作方便, 僅需要使用Plot()的方法, 支援多種數據格式的輸入, 讓用戶使用操作更方便
[輸入格式]x,y 模式( 單筆/陣列/串列)
[輸入格式]Y-t模式 ( 單筆/陣列/串列)
[右鍵選單]資料顯示顏色、標記
[右鍵選單]隱藏/顯示數據
[右鍵選單]顯示滑鼠位置的數值
[右鍵選單]顯示刻度範圍
[左鍵功能]縮放
[左鍵功能]平移
話不多說, 來看以下DEMO影片。 在同樣採用1,000,000點的X-Y圖表繪製中, Chart佔用了超過500MB的記憶體、耗費超過1600ms的時間, 並且GUI接近5秒才真正更新到畫面上。作為對比, EasyChartX占用的記憶起跟耗費的時間都只有Chart的1/10, GUI響應也非常的快。
台灣簡儀科技免費提供EasyChartX給測試測量客戶使用, 包含在SeeSharpTools工具中, 下載連結請參考以下
代碼如下:
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
namespace ChartDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
chart1.Series.Clear();
}
private void button_start_Click(object sender, EventArgs e)
{
int length = 1000000;
double[] xData = new double[length];
double[] yData = new double[length];
Random rand = new Random();
//產生亂數的資料
for (int i = 0; i < length; i++)
{
xData[i] = i;
yData[i] = rand.NextDouble();
}
//開啟計時器
Stopwatch sw = new Stopwatch();
//開始計時
sw.Restart();
//新建一個數據組, 把X,Y資料放進去
var series = new Series("Random Data");
for (int i = 0; i < length; i++)
{
series.Points.AddXY(xData[i], yData[i]);
}
//將數據組添加到圖表上
chart1.Series.Add(series);
//結算耗時並顯示在GUI上
var time=sw.ElapsedMilliseconds;
textBox_chart.Text = string.Format("Data Length={0}, Cost{1}ms", length, time);
}
private void button_easychartX_Click(object sender, EventArgs e)
{
int length = 1000000;
double[] xData = new double[length];
double[] yData = new double[length];
Random rand = new Random();
//產生亂數的資料
for (int i = 0; i < length; i++)
{
xData[i] = i;
yData[i] = rand.NextDouble();
}
//開啟計時器
Stopwatch sw = new Stopwatch();
//開始計時
sw.Restart();
//繪製圖表, 直接使用Plot方法
easyChartX1.Plot(xData, yData);
//結算耗時並顯示在GUI上
var time = sw.ElapsedMilliseconds;
textBox_easychartX.Text = string.Format("Data Length={0}, Cost{1}ms", length, time);
}
}
}
Comments