試述優(yōu)化程序的一些小技巧
發(fā)表時間:2023-08-20 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]記得以前在學(xué)校里面念數(shù)據(jù)結(jié)構(gòu)的時候,印象里有一個概念是程序的運算次數(shù)。在我的理解中,完成一定的事情運算次數(shù)越少則說明這個程序越優(yōu),因而我們當(dāng)時就要學(xué)習(xí)各種各樣的遍歷搜索,好多的排序方法,散列等等的事...
記得以前在學(xué)校里面念數(shù)據(jù)結(jié)構(gòu)的時候,印象里有一個概念是程序的運算次數(shù)。在我的理解中,完成一定的事情運算次數(shù)越少則說明這個程序越優(yōu),因而我們當(dāng)時就要學(xué)習(xí)各種各樣的遍歷搜索,好多的排序方法,散列等等的事情(好痛苦的記憶。.(dāng)時我就很困惑,這跟我們編寫一般的程序到底有什么關(guān)系呢!呵呵,當(dāng)時我最喜歡的是數(shù)組、窮舉法,反正都是讓計算機(jī)干活,要不然干嘛用計算機(jī),自已拿張紙來排序啟不是更快呢。
隨著科技時代的高速發(fā)展,計算機(jī)的速度也在以驚人的速度提高。我當(dāng)年光茫四射的PENTIUM 166 MMX 好像還是昨天的事;可是技術(shù)上速度上的提升并沒有給我們效率上的提高,除了界面越來越花俏,功能越來越無用以外,WORD還是做著排版打印的事,超級解霸還是用來看著VCD,我們并沒有從技術(shù)的發(fā)展中嘗到一絲的甜頭,換來的只有更新?lián)Q代不斷投入的金錢和勞力!
說得太遠(yuǎn)了,言歸正傳!剛剛從學(xué)校畢業(yè)的時候,我接到了第一個項目是編寫一家企業(yè)的進(jìn)銷存軟件;我當(dāng)時剛剛學(xué)了DELPHI,對自已的功力也很自負(fù)(每一個大學(xué)畢業(yè)生都有這樣子過),于是就這樣花了三個多月的時間把這個軟件完成了?墒钱(dāng)我拿著軟件到客戶那里去調(diào)試時出現(xiàn)了一個很奇怪的現(xiàn)象,雙擊程序的圖標(biāo)后,桌面一點的反應(yīng)也沒有,即沒有出現(xiàn)主窗口,也沒有報錯的信息。難道我部署程序出問題了嗎,我把整個DELPHI在客戶的機(jī)器上裝了一遍,再次運行還是一樣。我坐下來,準(zhǔn)備在客戶端把項目打開來查一查錯誤,這時,過了許久的程序終于出現(xiàn)了,我似乎也明白了我的錯誤在什么地方了。
原因是出在我的程序的主窗口放置了許多的COMBOBOX控件,這些下拉框項目的內(nèi)容是從數(shù)據(jù)庫中讀取的然后安裝到控件中的,目的是讓客戶作出一定的選擇然后提交到數(shù)據(jù)庫中。然而我錯就錯在我在初始化窗口的事件中,就連接到數(shù)據(jù)庫去逐一的讀取每個表的內(nèi)容,然后將內(nèi)容過濾(因為可能有重復(fù)的內(nèi)容)、排序,然后再ADD給每一個COMBOBOX,這要花費相當(dāng)一段的時間,這也是造成了我點擊程序后沒有反應(yīng)的現(xiàn)象。如果我把讀取列表放在用戶第一次點擊控件的事件中,把過慮和排序放在數(shù)據(jù)庫端做,這樣的現(xiàn)象也就不會出現(xiàn),F(xiàn)在有很多軟件現(xiàn)在都有一個LOGO畫面,它的目的既是展示公司的形象,我認(rèn)為還有另一個重要的目的是在主窗口未出現(xiàn)之前,在后臺初始化所有的數(shù)據(jù)和連接的時候,讓用戶了解程序已經(jīng)在運行中了。
我是一個很菜的CODER,不敢高談闊論,只能就程序的優(yōu)化總結(jié)一下我的一些經(jīng)驗:
1、現(xiàn)在有很多人喜歡很隨意的使用控件的事件,在事件里面直接編寫包含大量代碼的方法。這有兩個缺點,一是程序的可讀性極差,第二是你無法確定事件發(fā)生的先后次序,代碼的執(zhí)行有可能不能同步。所以我的觀點是,盡可能把完成一件任務(wù)的事件寫成一個獨立的方法或一個獨立的類,而如果要在事件中發(fā)生的話就調(diào)用這個方法或?qū)嵗@個類,然后執(zhí)行方法。
2、用三項表達(dá)式來代替IF。。THEN,用正則表達(dá)式來實現(xiàn)數(shù)據(jù)的查找和過濾。
3、對數(shù)據(jù)庫的連接是一種脫機(jī)操作,所以要盡量做到用事務(wù)來處理,不要一會會的連接斷開。
4、使用多線程和串行開發(fā)。(這個我也不懂,我最近正在學(xué),看的書是清華大學(xué)出版社出的《C# 線程參考手冊》)