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

Panel & Image 太多是否很耗CPU資源

尚未結案
yuban_cyn
一般會員


發表:1
回覆:2
積分:0
註冊:2004-08-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-08 15:33:55 IP:203.69.xxx.xxx 未訂閱
目前我在寫一支程式需要用到16個 Panel 而每個 Panel 上又有 20 多個 15x15 的 Image. 在執行時, 一 focus 到這個程式, CPU 便會跑到 99%, 在 lose focus 之後會降到 30~40%. 不知各位有什麼方法, 可以使資源不要跑到 99%這麼高. 執行的環境: CPU: Intel 850 MHz Ram: 256M OS: Win2000 謝謝
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-08 21:06:49 IP:211.22.xxx.xxx 未訂閱
我覺得不是你的PANEL在耗資源,而是你將16個PANEL上的320個IMAGE在設計時就將圖片載入了吧(我猜想的!),要降低資源使用,可在切換到某個 > ----------------------------------------------
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-09 00:07:11 IP:211.22.xxx.xxx 未訂閱
我覺得不是你的PANEL在耗資源,而是你將16個PANEL上的300多個IMAGE在設計時就將圖片載入了吧(我猜想的!),要降低資源使用,可在切換到某個 > 不好意思,按錯鈕,修改變成多 > 發表人 -
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-09 01:29:20 IP:61.230.xxx.xxx 未訂閱
yuban_cyn 您好:    這種現象大概是因為您的程式中使用的圖檔太多,而載入圖檔的動作尚未作完所致,當圖檔全部都載入完畢後,應該就不會有這種現象了,當然啦~如果您的記憶體已經全部都被佔用光了,那麼在您操作程式時,會因為視窗系統將存放在虛擬記憶體 (磁碟暫存檔) 的資料載入記憶體,並將暫時未用到的資料 (其它未被 Focus 的程式) 儲存到虛擬記憶體中,因此而導致磁碟 I/O 頻繁,進而導致 CPU 滿載。    因為您提供的資訊有限,因此我也和 Stallion 一樣僅能用猜的,您參考看看吧。      7 天天敲鍵盤 v 時時按滑鼠 8
yuban_cyn
一般會員


發表:1
回覆:2
積分:0
註冊:2004-08-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-16 09:24:45 IP:203.69.xxx.xxx 未訂閱
謝謝兩位的解答, 但我 16 個 panel 是要同時出現. 所以 Stallion 的方法沒辦法解決. 目前這個問題我還是沒有解決, 現在我的作法是設一個 Timer. 每當這個 form active 時, 每秒後會 lose focus, 這樣暫時解決 CPU 滿載的問題, 但這只是治標 . 不知各位還有沒有好的方法.
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-16 12:37:16 IP:61.230.xxx.xxx 未訂閱
yuban_cyn 您好:    您可以說明一下那些圖檔是靜態的 (載入後即不再變更) 還是動態的 (不時的在更換) 嗎?    如果是靜態載入的,那麼請您再確認一下,是在載入圖檔的當時有近於滿載的現象,載入完畢後即不再有該問題,還是所有圖檔全部載入完畢後,仍持續有該現象?如果是前者的話,那是正常的,如果是後者的話,可能就要看您的程式是如何寫的,才能找出問題了。 如果是動態的,那就有可能是磁碟 I/O 過於頻繁所致,下列這篇討論中有部分資訊可以參考一下: 效能100%的疑問 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=71077 7 天天敲鍵盤 v 時時按滑鼠 8
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-16 19:27:32 IP:211.22.xxx.xxx 未訂閱
16個Panel同時顯示來裝三百多個IMAGES?那要多大的版面空間啊!那何不使用PAGE CONTROL,裏面可以有很多的PAGES,按照PAGE來分類,同時可在PAGE的ONCHANGE或ONCHANGING來動態載入不同類的IMAGES,應該就能解決你的問題。而不是你現在所謂16個Panel同時顯示,那使用者的焦點可能一時不之往哪兒放才好。 ----------------------------------------------
yuban_cyn
一般會員


發表:1
回覆:2
積分:0
註冊:2004-08-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-18 18:25:28 IP:203.69.xxx.xxx 未訂閱
這16個 panel 是同時放在一個畫面顯示的, 而個 panel 上有 20幾個 15x15 左右的小圖貼在上面. 因為這些小圖是要顯示機器上的燈號, 會2秒更新一次, 所以是動態的.     不過貼上的圖只有 紅, 綠, 灰...等幾種顏色的小圖, 大多都是每個 panel 上重複貼上這幾個image的, 應該不會用到 disk I/O 來存取.    而我安裝的環境只有單純的 win2000 而不會再灌其它的軟體. 跟 RedSnow 兄所說 效能100%的疑問 的問題不一樣. 我想會不會是顯示晶片的問題. 因為是安裝在小台的工業電腦上. 或者是 for loop 太長, 因為要判斷很多 state 來貼圖.    而 Stallion 兄說用 PAGE CONTROL, 在這個程式是沒辦法的, 因為要讓使用者看到所有機器的狀況.    謝謝各位, 沒想到各回答的速度這麼快 發表人 -
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-08-18 23:30:58 IP:61.217.xxx.xxx 未訂閱
yuban_cyn 您好:
引言:....不過貼上的圖只有 紅, 綠, 灰...等幾種顏色的小圖....
既然如此,您或許可以考慮將那 320 個 Image 拿掉,改用 Panel 來代替,直接設定 Panel 的 Color 值。 我剛才設了 320 個 15x15 的 Panel 來作模擬測試,產生幾個結果如下: * 測試環境:Windows 2000 BCB4 192MB RAM (執行前可用空間約剩 32MB) * 設定條件:Timer Interval = 100
  1. 如果我在 Timer 的 OnTimer 事件中設定一個 i=0 to i<320 的迴圈,並在迴圈中將那 320 個 Panel 重設一次顏色值,那麼系統負荷約為 95%,如果 Timer 的 Interval 改為 1000,則負荷達約為 20% 左右。
  2. 如果我將前述動作改成用亂數產生一個 0 至 319 的數字,然後仍然跑相同的迴圈,但是僅在迴圈數字與亂取取得的數字相同時,才重設對應 Panel 的顏色值,那麼系統負荷約為 2%。
  3. 使用 Thread,繪製條件與第 1 項相同 (320 個 Panel 全部重設顏色值),跑迴圈的間隔時間設置 SleepEx(100, false),則系統負荷為 78%。
  4. 使用 Thread,繪製條件與第 2 項相同 (與取得亂數值相同的 Panel 才重設顏色值),跑迴圈的間隔時間設置 SleepEx(100, false),則系統負荷為 2%。
由上述結果來看,造成系統負荷差異的地方,大致上應該是迴圈重設顏色值之後的繪製動作以及週期密集度這三個部份。 我不知道您的程式實際運作情形為何?因此以上的的測試結果並不能反應您的實際狀況,但是或許可供您做個比對與參考。 7 天天敲鍵盤 v 時時按滑鼠 8
系統時間:2024-05-09 7:05:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!