使用各種 WPF Chart圖表控件、插件的經歷回顧與總結


客戶為表達對我司 LightningChart 圖表控件的喜愛及對我司提供協助表示感謝,特將研究使用 WPF 數據可視化圖表控件產品時的一些經歷與我們分享,如下將以第一人稱轉述。

大家好:

因為項目需求,需要基於Chart控件制作一個示波器,用於顯示信號的實時波形圖。

網上基於WPF開發的Chart控件還是有蠻多的,於是我上網查找了幾款不錯的Chart控件:ComponentOne、Live Charts、DevExpress以及LightningChart。,對它們進行簡單地了解和學習,由於時間有限,所以掌握得不是那么全面,但是對於公司控件的選型基本可以用作參考和判斷。

 

控件的選擇主要基於以下幾點:
a. 效率;

b. 學習成本;

c. 功能豐富性;

 

效率對於實時顯示數據是至關重要的。示波器用於實時顯示數據,如果數據量不是特別大的話,相信很多Chart控件基本都能夠滿足這個需求。當然針對不同的項目可能情況不同,所以需要展示的數據量也會存在差別。但是事實上,這樣的實時數據的數據量往往是很大的,並且有可能需要顯示多條通道 Channel的信號波形圖。Chart處理和渲染波形圖的效率較低,是很難做到實時顯示的。為什么?因為Chart控件無法渲染大量數據,這時為了使程序保持相對流暢地運行,只能通過一些手段和方法來限制數據量,如果數據量太大,即使在顯示的范圍內做了采樣算法,丟棄了一部分數據,還是會在程序里堆積很 多數據等待渲染。由於數據的大量堆積,波形的顯示在時間上會較滯后,也就是無法做到實時顯示。對於數據點的渲染,一般有兩種方式,通過CPU渲染和通過 GPU渲染,顯然CPU的並行運算和GPU相比是相形見絀的,所以GPU渲染要比CPU渲染效率高很多。

學習使用一個控件,最理想的是該控件具有足夠的資料、文檔和使用實例。這樣學習效率才會得到成倍的提高,學習成本才會減低。如果投入了大量時間,還是不知道怎么使用那個控件,那么即使那個控件做得再好,也只是一堆無用的代碼而已。簡單來說,相比幾個控件,哪個能夠滿足我需求的同時,還具有完備的文檔和資料,我就會選擇哪個。

需求是多樣性的,同時也是在不斷變化的。因此符合這種需求變化的多樣性,要么把控件設計得比較靈活,可以任意調整和修改,但是這種情況一般比較少見,一般屬於開源,並且要求比較高。還有一種是,控件把別人能夠想到的,甚至沒有想到的功能基本都實現了,我想很多控件都是這樣的,這就要求控件的功能足夠豐富。

 

使用的幾款控件比對分析

C1Chart
官網地址:https://www.grapecity.com.cn/developer/componentone-wpf

文檔:http://help.grapecity.com.cn/pages/viewpage.action?pageId=3871181

這是通過CPU進行數據點的渲染,效率一般。如果數據量太大,可以使用它的位圖模式,在該模式下,波形顯示的效率會得到很大改善,但是還是需要在控件之外做一些額外的並行處理操作,增加了程序的開發難度。

它的文檔,我已無力吐槽,Chart簡單的功能應用,是有簡單的示例和說明文檔。但是如果想做一些額外的創新和定制,這些文檔顯然沒有半點用處,可能商業模式的選擇不同造成的吧。不得不說,在試用期期間,要做demo來評估控件期間,這些文檔可以不客氣地說,寫得很爛。

對於功能的豐富性,舉個簡單的例子。它的多Y軸功能顯得有些單一,如果添加顯示的波形比較多,而且每條波形需要對應一個Y軸,那么Y軸區間就會壓縮Chart的波形顯示空間。這種情況也可能我沒找到相應的功能屬性來進行設置,但也從一方面說明了資料文檔寫得真的爛。

 

LiveCharts
官網地址: https://lvcharts.net/

Simple, flexible, interactive & powerful data visualization for .Net LiveCharts is just data visualization but built and for everyone. 這是它官網的介紹和說明。

它是一個開源的項目,有兩部分組成,控件的使用部分是免費的,數據采樣算法是需要收費的。控件使用比較簡單,也有充足的示例,並且文檔資料寫得不錯,當然還有源碼可以看。

對於效率,它是通過畫布Canvas來進行繪制波形的,通過CPU運行和渲染,經過demo測試,在畫布同時渲染2000個點較為流暢,再多就會有 所卡頓,當然這個數值跟PC的配置有關系。但是基於所有的控件,在同一PC來測試效率,也可以初略地評估各個控件渲染效率的高低。加入采樣算法,根據官方 說法可以流暢地渲染30萬(30,000)個點。我把官方的示例運行起來,在渲染的過程中,有少許卡頓,不過可以忽略。對於這個采樣算法,由於時間有限, 我沒有做實時數據顯示的驗證,所以不做過多敘述。總的來說,是一款不錯的控件,界面相對也比較美觀,可定制性也很高。但是對於效率要求較高的情 況,LiveCharts還是有些令人擔憂。

 

DevExpress
DevExpress 對於這個控件,沒有過多認識。只是下載了官網提供的示例,然后運行了它的實時顯示的示例,對於CPU占用率比較高,在本機運行該示例進程CPU占用率高達40%。於是就沒有繼續了解下去,就果斷放棄了選擇。

 

LightningChart 圖表控件
官網地址:http://arction.cn/

文檔資料: http://arction.cn/resources

中文論壇:http://forum.jianshukeji.com/forum.php

LightningChart是目前為止,我所了解的多個wpf的Chart控件里,唯一使用GPU渲染的。渲染效率而言,秒殺一切wpf的Chart控件。所以即使它在渲染數十萬個點,甚至上百萬個點也依然很流暢。因為使用GPU渲染,所以CPU的占用相對也低。 在編寫程序時,由於LightningChart的高效性,所以我在控件之外,不需要做太多額外的處理,極大地降低了程序的實現難度,同時也極大地提高了程序的實現速度。渲染效率的高效性很好地保證了實時數據的實時性。 它提供的文檔中英文版本都有,小缺點可能就是文檔不是最新的,但在試用期間提供免費中文技術支持服務(請通過中文論壇聯系),為開發遇到疑問、語言轉換節省了不少時間。 LightningChart的功能比較豐富,使用也比較簡單,並且示例也很豐富,一般參考示例基本能夠滿足絕大多數功能的實現。

 

結論
綜上所述,基於效率優先、易用性和豐富性的考慮,優先選擇LightningChart,不得不再次說,它的效率秒殺一切WPF的chart控件。

 

因時間與篇幅長度原因,暫未一一寫下去,感謝各位的閱讀,希望能對各位的選擇WPF chart 控件有所幫助。
————————————————
版權聲明:本文為CSDN博主「簡數科技」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_42125932/article/details/82350293


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM