成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Qt Embedded性能優化詳解

移動開發
Qt Embedded是挪威公司的圖形化界面開發工具QT的嵌入式版本,它通過QTAPI與LinuxI/O以及Framebuffer直接交互,擁有較高的運行效率,而且整體采用面向對象編程,擁有良好地體系架構和編程模式.

Qt EmbeddedQt一樣,在4.5版本之后提供了三種不同的授權協議GPL, LGPL和Commercial。長久以來,雖然使用Qt Embedded在作開發,但對Qt Embedded的性能方面不甚關心,并且因為抱著對qtsoftware的信心,也沒仔細去了解如何優化Qt Embedded。直到前段時間,參加了某個全國嵌入式大賽,使用了Qt Embedded4.5.0在s3c2410平臺上,竟然出現了卡機的現象。對于嵌入式開發來說,資源是極為重要的,而現在看來,Qt變得越來越龐大,越來越耗費稀缺的設備資源,這時,優化就變得格外重要了。在Qt Embedded的文檔中有關于性能優化的介紹,我做了簡單地翻譯,希望能給在嵌入式領域使用Qt Embedded的開發者有所幫助。

Qt 性能優化

當在資源稀缺的設備上開發嵌入式應用程序時,Qt for Windows CE 和Qt for Embedded Linux通過調整一系列參數的開啟或關閉來內存及CPU的需求。這些選擇參數方法的范圍主要在編程風格,鏈接方式及內存分配。

著重注意的是,最直接節省資源的辦法是在編譯時去掉不需要的特性。詳細可以見文檔中的fine tuning features部分。

1、編程風格

2、靜態鏈接vs動態鏈接

3、替換內存分配方式

4、繞過后備存放區

編程風格

與其選擇隨時地創造對話框和控件當它們需要時,并且在不再需要時刪除它們,不如一次性地創建,同時在需要的時候使用QWidget::hide()和QWidget::show() 功能函數。為了避免應用程序啟動的緩慢,應該推遲對話框和控件的創建直到需要的時候。所有這樣將改善CPU的性能,所需要付出的只是更多的一點內存,但這會加快運行的效率。

動態 Vs 靜態鏈接

許多CPU和內存是通過ELF (Executable and Linking Format)鏈接進程,重大的節省可以通過靜態編譯程序的方式實現;而不像是在實際執行中,采集與Qt庫有關的部分并且動態鏈接,所有的應用程序將被創建成一個獨立的執行文件,這個文件采用靜態方式鏈接到Qt庫上。

這些將改善程序啟動時間和減少內存占有率,但前提它會損害靈活實用的特性(一旦增加新的應用部分,必須重新編譯一個獨立的執行文件)和程序健壯性(假如一個應用部分有bug,將危害到其他的應用部分)。

建立一個靜態編譯

為了將Qt編譯成為一個靜態庫,在編譯時采用-static參數:

  1. ./configure –static 

為了將應用程序套裝建立為一個一體化的應用,應當設計各個應用作為單獨的控件(或者控件集)并盡可能地使用最少的代碼量在main()函數。然后,設計一個獨立的應用程序可以提高其他應用程序見交互的方法。Qt Extended platform就是采用典型的實例:它既可以使用一系列動態鏈接執行創建,也可以作為單獨的一個靜態的獨立應用程序。

需注意的時,程序仍將動態地鏈接標準C庫以及其它庫,因為在目標平臺上可能會有其他的應用程序使用它們。

當安裝最終客戶端應用程序時,這個方式不一定是個選擇,但是當在為一個受CPU和內存限制的設備開發一個單獨的應用程序套裝時,這個選擇是十分有益的。

替換內存分配方式

在一些平臺上,那些運用C++編譯的庫,在使用“new”和“delete”操作方面有十分差的性能。未來改善內存分配的性能,可以通過以下的功能函數替代實現:

  1. void *operator new[](size_t size)  
  2.  {  
  3.      return malloc(size);  
  4.  }  
  5.  
  6.  void *operator new(size_t size)  
  7.  {  
  8.      return malloc(size);  
  9.  }  
  10.  
  11.  void operator delete[](void *ptr)  
  12.  {  
  13.      free(ptr);  
  14.  }  
  15.  
  16.  void operator delete[](void *ptr, size_t)  
  17.  {  
  18.      free(ptr);  
  19.  }  
  20.  
  21.  void operator delete(void *ptr)  
  22.  {  
  23.      free(ptr);  
  24.  }  
  25.  
  26.  void operator delete(void *ptr, size_t)  
  27.  {  
  28.      free(ptr);  
  29.  } 

以上這些實例顯示了必要的代碼采用C的內存分配。

繞過后備存放區

當運行時,Qt使用了后備存放區。比如,一個繪圖緩存,可以減少閃爍和支持如重疊的圖形操作。

一般,默認的流程是這樣的,對于每個客戶端,將自己的控件傳入內存,同時,服務端負責將這些內容從內存中取出并在屏幕上繪制。但是有些硬件是眾所周知的,同時已經有嵌入式軟件的案例,這些對于繞開后備存放區是很有幫助的,可以運行客戶端直接地熟練地操作硬件。這里有兩種方式來實現直接繪制:第一種方式是對每個控件使用Qt::WA_PaintOnScreen窗口屬性,另一種是使用了QDirectPainter類來保存幀緩存的區域。想獲取更多信息,可以參考architecture 文檔部分的direct painting細節。

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-29 09:20:41

Qt Embedded Qtopia

2011-06-13 13:35:06

Qt Embedded QT

2010-03-02 09:53:14

MySQL性能優化

2024-03-07 11:03:21

ElasticseaES索引

2009-09-22 17:25:41

優化Hibernate

2011-06-30 10:59:43

2010-06-04 11:00:27

hadoop性能優化

2023-11-15 16:35:31

SQL數據庫

2023-07-10 16:18:18

性能優化開發

2011-06-28 13:47:37

Embedded QT ARM

2011-06-29 15:14:22

Qt Embedded 鍵盤

2011-06-29 15:36:21

Qt Embedded 鍵盤

2020-06-04 16:57:07

移動開發互聯網實踐

2009-04-10 09:06:16

Windows Emb

2009-03-24 09:14:20

Windows Emb

2010-04-22 17:27:22

Oracle性能

2021-07-27 20:51:02

AndroidDNS網絡

2011-04-22 19:29:15

Windows Emb嵌入式開發

2009-04-08 10:51:59

SQL優化經驗

2025-06-03 00:00:06

性能優化性能指標響應時間
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久人体视频 | 欧美性精品 | 免费在线黄 | 国产成在线观看免费视频 | 精品久久久网站 | 草久久 | 久热国产精品视频 | 久久精品亚洲精品国产欧美 | 欧美日韩在线播放 | 一级片av | 蜜桃av鲁一鲁一鲁一鲁 | 国产 亚洲 网红 主播 | 久久久久一区二区 | 黑人精品欧美一区二区蜜桃 | 国产精品免费一区二区三区四区 | 久久精品国产99国产精品亚洲 | 毛片av免费看 | 国产精品2区 | 伊人精品一区二区三区 | 午夜激情在线视频 | 国产一级视频在线观看 | 亚洲视频自拍 | 欧美精品乱码99久久影院 | 国产精品美女久久久 | 久一精品| 国产一区二 | 祝你幸福电影在线观看 | 亚洲精品久久久久avwww潮水 | 国产成人免费视频网站高清观看视频 | 99久久精品国产一区二区三区 | av先锋资源| 国产成人精品一区二区三区在线观看 | 看羞羞视频 | 亚洲欧美另类在线观看 | 日本在线观看视频 | 国产在线一区二 | 国产精品一区二区免费 | 九九亚洲| 日韩在线大片 | 久久性| 久久久久久国产精品免费免费狐狸 |