線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3071
推到 Plurk!
推到 Facebook!

大量的資料如何用Chart畫出來

答題得分者是:harpist
dueseven
一般會員


發表:5
回覆:9
積分:7
註冊:2007-05-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-30 14:08:56 IP:140.110.xxx.xxx 訂閱
我手邊目前很有多訊號,想要把這些訊號累積數天之後的資料利用TLineSeries在Chart中畫出來,橫軸為時間,縱軸為訊號值,
每一個訊號的取樣頻率大部分是1Hz,少部分為0.1Hz。
若是考慮0.1Hz的訊號,則一天的資料就有864000筆,這麼多的資料畫在Chart上,光是記憶體就吃掉了40~50MB,
若是畫個二天的資料,就Out of Memory 了,請問各位大大,有什麼樣的方法,可以解決大量資料的畫圖問題呢?
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-30 14:27:42 IP:59.104.xxx.xxx 未訂閱
我使用的方式是分段載入資料,限制可瀏覽範圍為24小時,
讓使用者自定要看哪一個區段)的資料然後再載入資料。
是否真的有必要一次載入864000*2的資料量呢?
這樣的的資料一次顯現看得出什麼嗎?目的是什麼?
另外也可以當時間範圍是24小時的則載入取樣頻率1Hz 數據,
這樣資料量就降到86400筆,時間範圍2小時內的話載入0.1Hz數據。

以上您參考參考
------
~§~迷時師渡,悟了自渡~§~
dueseven
一般會員


發表:5
回覆:9
積分:7
註冊:2007-05-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-30 14:57:10 IP:140.110.xxx.xxx 訂閱
因為有些訊號是要觀察長期的變化,比如說是真空計的讀值,若是只看短時間的範圍,在真空正常的情況下,幾乎是看不到有太大的變化。我也考慮過若是變化不大的情況下,那就別畫出來,這樣做的確是可以減少memory的使用量,但相對的就是得要犧性精準度,再者,如何判斷「什麼是變化不大的訊號」也是一個非常critical的問題。所以,我老闆是傾向全部的點都畫出來,若是要zoom in的話,那麼也就不會有精準度不夠的問題。
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-30 15:18:37 IP:59.104.xxx.xxx 未訂閱
這其實牽涉到你需求的問題,先將需求定義出來
1.觀察長期的變化(長期最大的時間範圍是多少2天?)
2.精準度老闆傾向全部的點都畫出來(0.1Hz?)
3.最大資料量是864000*2

解決這個需求的方案是TChar ?如果TChar 無法滿足是否考慮其他?
或自己寫?又是另一個方案了。

其實你要放多少資料就要多少記憶體
如果要減少記憶體的使用唯一的方法就是減少資料。
如果記憶體不夠用那就是增加可用的記憶體。

另外TChar 我使用的經驗當大筆資料畫上去後一段時間反應會變的很慢,
所以我通常會在顯示趨勢圖的視窗加一個偵測使用者動作,如果使用者有
一段時間沒反應我就會釋放掉。
最後我在想你是否是Chart 一直開著然後一直新增資料上去呢?
建議資料先存起來需要觀看時再建立Chart,否則可能會有我上述的情況。
------
~§~迷時師渡,悟了自渡~§~
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-05-30 18:03:37 IP:61.64.xxx.xxx 訂閱
這是一個自我矛盾,且不實際的問題

請問如果再真實世界,你會需要多大的紙?

我想 A0 也不夠你用,你會需要一片牆,而且是很長的牆

更不用說,真實世界的解析度,比電腦高多了

所以你只能
1. 顯示特定範圍
2. 顯示大範圍時,必需減少取樣間隔,如果怕失真過多,自己寫個演算法來取特定必需數值

目前的科技硬體技術,只有這兩種方法可以用
如果你找到,將所有點畫出,同時看得清楚,隨意 room in/out 的無失真處理方式(不失精度),我想,那你就出名了

建議你,暗示你的老闆,這個問題「有不切實際」的問題
system72
中階會員


發表:15
回覆:114
積分:55
註冊:2005-08-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-05-31 08:47:09 IP:219.80.xxx.xxx 訂閱

===================引 用 dueseven 文 章==================
>若是考慮0.1Hz的訊號,則一天的資料就有864000筆,這麼多的資料畫在Chart上,光是記憶體就吃掉了40~50MB,
>若是畫個二天的資料,就Out of Memory 了,請問各位大大,有什麼樣的方法,可以解決大量資料的畫圖問題呢?

所以需動態配置約 80-100MB 的記憶體,

不知道你那台主機記憶體多少? OS是?

如果是 256mb , 那加Ram 看看.
如果是 win95/98,那換os看看.



如果是已經2000/xp, 512mb以上,那加Ram大概就沒用.

只是猜猜看. 也不是很確定.
編輯記錄
system72 重新編輯於 2007-05-31 08:53:41, 註解 無‧
dueseven
一般會員


發表:5
回覆:9
積分:7
註冊:2007-05-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-05-31 15:21:12 IP:140.110.xxx.xxx 訂閱
感謝各位大大的意見,我也了解這樣一大筆data要全部畫出來是mission impossible。
我想我要不就是忽略那些變化太小的資料,再不然就是得找另外一個畫圖的方式。
另外想請問的是,在BCB中除了利用TeeChart或是Canvas畫圖之外,是否還有其它的元件可以使用呢?
我試過Canvas,但它似乎沒有辦法一次畫那麼多的資料量,或是各位大大有解決的方法,請指教。
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-05-31 19:01:17 IP:59.104.xxx.xxx 未訂閱
忽然想到 Out of Memory 的問題怎麼我都沒碰到過呢?
我使用的 TeeChart 版本是7.02,我之前在一個Chart裡的資料數
在設計初期未切割也不少於 864000*2 也未曾有 Out of Memory
的問題,推敲了一下也實際驗證了這個問題的發生原因。

因為我在畫的時候是動態產生series,這麼做的原因是我偵測的設備
數量很多,設備可能會有狀況如斷線,這時我要在Chart表現出斷線
跟恢復連線後中間空白,所以我在斷線後新的資料是再產生一個series
畫下去,而我想你大概是一個series一直新增資料進去所以造成了
Out of Memory 的問題,實際測試結果一個series最大的資料數是
583000
所以當你的資料超過583000時請新增一個新的series接下去畫
------
~§~迷時師渡,悟了自渡~§~
dueseven
一般會員


發表:5
回覆:9
積分:7
註冊:2007-05-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-06-05 11:14:38 IP:140.110.xxx.xxx 訂閱
了解,謝謝 harpist.....
系統時間:2024-05-06 6:56:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!