編寫高質(zhì)量易語言代碼注意點
今天在淘百度的時候看到了這篇文章。覺得很不錯。就給親們分享下。
如果你想學好易語言的話請仔細看看以下的內(nèi)容吧??赐甏宋闹蟊WC你大有收獲。
什么是一個高效的軟件?一個高效的軟件不僅應該比實現(xiàn)同樣功能的軟件運行得更快,還應該消耗更少的系統(tǒng)資源。程序的時間效率是指運行速度,空間效率是指程序占用內(nèi)存或者外存的狀況。另外程序的效率我們也可以分為全局效率和局部效率。全局效率是指站在整個系統(tǒng)的角度上考慮的效率,局部效率是指站在模塊或函數(shù)角度上考慮的效率。
1. 使用整數(shù)和長整數(shù)
提高代碼運行速度最簡單的方法莫過于使用正確的數(shù)據(jù)類型了。也許你不相信,但是 正確地選擇數(shù)據(jù)類型可以大幅度提升代碼的性能。在大多數(shù)情況下,程序員可以將短整數(shù)型、小數(shù)型和雙精度小數(shù)型的變量替換為整數(shù)(Integer)或長整數(shù)(Long)類型的變量,因為易語言處理整數(shù)和長整數(shù)的能力遠遠高于處理其它幾種數(shù)據(jù)類型。
在大多數(shù)情況下,程序員選擇使用小數(shù)型或雙精度小數(shù)型的原因是因為它們能夠保存小數(shù)。但是小數(shù)也可以保存在整數(shù)類型的變量中。例如程序中約定有三位小數(shù),那么只需要將保存在整數(shù)型變量中的數(shù)值除以1000就可以得到結(jié)果。根據(jù)我的經(jīng)驗,使用整數(shù)和長整數(shù)替代短整數(shù)型、小數(shù)型和雙精度小數(shù)型后,代碼的運行速度可以提高將近10倍。
但是我們也不要老是強調(diào)使用使用整數(shù)和長整數(shù),因為在程序中數(shù)據(jù)類型的定義還牽涉一個關(guān)鍵的問題,就是數(shù)據(jù)的安全,頻繁而無規(guī)范地定義數(shù)據(jù)類型會使算法出現(xiàn)漏洞,是數(shù)據(jù)的安全和臨界判斷有問題.對財務和工程計算而言,小數(shù)點的精度是很敏感的數(shù)據(jù),只能用雙精度數(shù)據(jù)來規(guī)范.另外, 換成整型也會導致程序可讀性急劇下降.
2. 避免使用通用型數(shù)據(jù)
通用型的變量需要16個字節(jié)的空間來保存數(shù)據(jù),而一個整數(shù)(Integer)只需要2個字節(jié)。通常使用通用型變量的目的是為了減少設(shè)計的工作量和代碼量,也有的程序員圖個省事而使用它。但是如果一個軟件經(jīng)過了嚴格設(shè)計和按照規(guī)范編碼的話,完全可以避免使用變體類型。
3. 盡量避免使用屬性
在平時的代碼中,最常見的比較低效的代碼就是在可以使用變量的情況下,反復使用屬性(Property),尤其是在循環(huán)中。要知道存取變量的速度是存取屬性的速度的20倍左右。下面這段代碼是很多程序員在程序中會使用到的:
容器名: 數(shù)值 類型:整數(shù)型
容器名: 容器 類型:整數(shù)型
計次循環(huán)首(7,容器)
文本1.內(nèi)容 = 文本1.內(nèi)容 + #換行符 + 到文本((數(shù)值×容器))
計次循環(huán)尾()
下面這段代碼的執(zhí)行速度是上面代碼的20倍。
容器名: 文本 類型:文本型
文本 = 文本1.內(nèi)容
文本 = 文本 + #換行符 + 到文本((數(shù)值×容器))
文本1.內(nèi)容 = 文本
另外要注意,這個涉及一個編程思路,用屬性當變量的作法大多數(shù)情況可以簡化算法。所以有時候也不能一味強調(diào)用變量代替屬性。
6. 避免調(diào)用很短的子程序
調(diào)用只有幾行代碼的子程序也是不經(jīng)濟的--調(diào)用子程序所花費的時間或許比執(zhí)行子程序中的代碼需要更長的時間。在這種情況下,你可以把子程序中的代碼拷貝到原來調(diào)用子程序的地方。
但是有時候小的子程序可能會被調(diào)用很多次而不是只有兩三次,這時就應該調(diào)用它。
7. 減少對子對象的引用
在易語言中,通過使用.來實現(xiàn)對象的引用。例如:
窗口1.編輯框1.內(nèi)容
在上面的例子中,程序引用了兩個對象:窗口1和編輯框1。利用這種方法引用效率很低。但遺憾的是,沒有辦法可以避免它。我的“多媒體模塊”就有這個缺點。
8. 檢查文本型數(shù)據(jù)是否為空
大多數(shù)易語言用戶在檢查文本型數(shù)據(jù)是否為空時會使用下面的方法:
如果 (文本1.內(nèi)容 = "" )
注釋: 執(zhí)行操作
結(jié)束如果
很不幸,進行字符串比較需要的處理量甚至比讀取屬性還要大。因此我建議大家使用下面的方法:
如果 (到數(shù)值(文本1.內(nèi)容) = 0 )
另一個不同的意見是:問題在于當文本字串為 "ABC"之類的非數(shù)值型時, 到數(shù)值("ABC")=0并不表示為空。文本比較的效率并不低,在底層算法中,一般會直接比較長度才會繼續(xù)比較內(nèi)容。
9. 使用數(shù)組,而不是多個變量
當你有多個保存類似數(shù)據(jù)的變量時,可以考慮將他們用一個數(shù)組代替。在易語言中,數(shù)組是最高效的數(shù)據(jù)結(jié)構(gòu)之一。
10. 盡量使用動態(tài)數(shù)組,而不是靜態(tài)數(shù)組
使用動態(tài)數(shù)組對代碼的執(zhí)行速度不會產(chǎn)生太大的影響,但是在某些情況下可以節(jié)約大量的資源。
11. 銷毀對象
無論編寫的是什么軟件,程序員都需要考慮在用戶決定終止軟件運行后釋放軟件占用的內(nèi)存空間。但遺憾的是很多用戶對這一點好像并不是很在意。正確的做法是在退出程序前需要銷毀程序中使用的對象。例如:關(guān)閉數(shù)據(jù)庫:關(guān)閉(數(shù)據(jù)庫名稱)、全部關(guān)閉(),關(guān)閉打開(播放)的文件,關(guān)閉載入的圖片等。
中止程序執(zhí)行時應該要關(guān)閉打開的文件(包括數(shù)據(jù)庫文件、圖片文件等),但是窗口銷毀對銷毀窗口及窗口單元來說是自動的,已足夠做釋放用,在窗口內(nèi)最好不要隨意銷毀窗口單元,可能會導致程序運行中的潛在的單元數(shù)據(jù)訪問而崩潰.只有在圖形buffer情況才需要經(jīng)常銷毀。
12. 盡量使用內(nèi)部子程序,減少易模塊的數(shù)量
因為從易語言連接到一個外部對象需要耗費大量的CPU處理能力。每當你調(diào)用接口函數(shù)的時候,都會浪費大量的系統(tǒng)資源。
另外只有在易模塊中的接口函數(shù)或變量被調(diào)用時,易語言才將易模塊加載到內(nèi)存中;當易語言應用程序退出時,才會從內(nèi)存中卸載這些模塊。如果代碼中只有一個模塊,易語言就只會進行一次加載操作,這樣代碼的效率就得到了提高;反之如果代碼中有多個模塊,易語言會進行多次加載操作,代碼的效率會降低。
13. 使用對象數(shù)組
當設(shè)計用戶界面時,對于同樣類型的控件,程序員應該盡量使用對象數(shù)組。你可以做一個實驗:在窗口上添加100個圖片框,每個圖片框都有不同的名稱,運行程序。然后創(chuàng)建一個新的工程,同樣在窗口上添加100個圖片框,不過這一次使用對象數(shù)組,運行程序,你可以注意到兩個程序加載時間上的差別。
也有人認為兩者從邏輯上看效率應該差不多。
14. 使用窗口單元“移動”方法
在改變對象的位置時,有些用戶喜歡使用“寬度”、“高度”、“頂邊”和“左邊”屬性。例如:
按鈕1.寬度 = 100
按鈕1.高度 = 100
按鈕1.頂邊 = 0
按鈕1.左邊 = 0
實際上這樣做效率很低,因為程序修改了四個屬性,而且每次修改之后,窗口都會被重繪。正確的做法是使用Move方法:
按鈕1.移動(0,0,100,100)
15. 減少圖片的使用
圖片將占用大量內(nèi)存,而且處理圖片也需要占用很多CPU資源。在軟件中,如果可能的話,可以考慮用背景色來替代圖片--當然這只是從技術(shù)人員的角度出發(fā)看這個問題。
但是如果為了優(yōu)化程序界面,使用圖形換來的好處可能遠勝節(jié)約下的資源,否則就不會有XP,也不會有游戲的進步了。
16. 編譯優(yōu)化
易語言的程序編譯有三個選項:“編譯”、“獨立編譯”、“編譯生成安裝軟件”。優(yōu)先使用的次序應該是“編譯生成安裝軟件”、“編譯”、“獨立編譯”,因為“獨立編譯”會將易語言系統(tǒng)中所有的支持庫都編譯進去,而“編譯生成安裝軟件”只選擇程序中必要的支持庫編譯。要脫離易語言環(huán)境也可以運行,就不要使用“編譯”而應用“編譯生成安裝軟件”或“獨立編譯”。
總結(jié):執(zhí)行效率和程序可讀性永遠是對矛盾,兩者應該通盤考慮;資源占用和程序易用性永遠是對矛盾,兩者也應該通盤考慮?;诖?,下面探討一些提高程序的效率的規(guī)則。
【規(guī)則1】不要一味地追求程序的效率,應當在滿足正確性、可靠性、健壯性、可讀性等質(zhì)量因素的前提下,設(shè)法提高程序的效率。
【規(guī)則2】以提高程序的全局效率為主,提高局部效率為輔。
【規(guī)則3】在優(yōu)化程序的效率時,應當先找出限制效率的“瓶頸”,不要在無關(guān)緊要之處優(yōu)化。
【規(guī)則4】先優(yōu)化數(shù)據(jù)結(jié)構(gòu)和算法,再優(yōu)化執(zhí)行代碼。先考慮某功能是否可以用函數(shù)(命令)來實現(xiàn),如果找不到這樣的函數(shù),再考慮用其他代碼實現(xiàn)。
【規(guī)則5】有時候時間效率和空間效率可能對立,此時應當分析那個更重要,作出適當?shù)恼壑?。例如多花費一些內(nèi)存來提高性能。
【規(guī)則6】不要在什么時候都只追求緊湊的代碼,因為緊湊的代碼并不能產(chǎn)生高效的機器碼。
相關(guān)文章
易語言QQ群發(fā)支持圖片文字數(shù)據(jù)一起發(fā)送的工具
今天小編就為大家分享一篇關(guān)于易語言QQ群發(fā)支持圖片文字數(shù)據(jù)一起發(fā)送的工具,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12