




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、如何優(yōu)化你的PowerBuilder程序PowerBuilder是快速有效的開發(fā)工具,在程序?qū)崿F(xiàn)過程靈活多樣,下面介紹一下在開發(fā)高校產(chǎn)品過程中積累的一些經(jīng)驗(yàn)。一、處理 SQL 語句1、緩沖 SQL 語句 在應(yīng)用程序中,有時(shí)需要反復(fù)調(diào)用同一組 SQL語句,在這種情況下,可以通過在應(yīng)用中為這些 SQL 建立緩沖區(qū)來提高執(zhí)行性能。 &
2、#160; 在缺省情況下,SQL 語句的緩沖區(qū)是關(guān)閉的,你可以通過如下語句打開它: SQLCACHE = n
3、;n 表示裝入緩沖區(qū)的 SQL 語句數(shù)量(缺省為0)。 例如: dw_1.SetTransObject(sqlca) SQLCA.dbParm = "SQLCache = 0" dw_1.retrieve() 如果將上例的 "
4、;SQLCache = 0" 改為 "SQLCache = 25",此句的執(zhí)行效率將提高五分之一左右。但應(yīng)注意緩沖區(qū)的大小,否則也將影響程序執(zhí)行的性能。 注:此方法對用 ODBC 和 orACLE 連接的數(shù)據(jù)庫非常有效。2、捆綁變量 請看下例: SQLCA.DBPARM = "DISABLEBIND=1"
5、; Insert INTO DA_DH valueS("1","河南0") Insert INTO DA_DH valueS("2","河南1") Insert INTO DA_DH valueS("3","河南2")
6、; Insert INTO DA_DH valueS("4","河南3") Insert INTO DA_DH valueS("5","河南4") Insert INTO DA_DH valueS("6","河南5")
7、; 這里未使用捆綁變量,在插入是 PB 將重新處理每個(gè)帶有 新值的SQL語句。如果將上例改為: SQLCA.DBPARM = "DISABLEBIND=0" Insert INTO DA_DH valueS("1","河南0") Insert INTO&
8、#160;DA_DH valueS("2","河南1") Insert INTO DA_DH valueS("3","河南2") Insert INTO DA_DH valueS("4","河南3") Insert INTO DA_DH va
9、lueS("5","河南4") Insert INTO DA_DH valueS("6","河南5") 則系統(tǒng)將把 Insert 語句按如下格式進(jìn)行處理: Insert INTO DA_DH valueS(?,?)
10、160;其中 "?" 稱為占位符。系統(tǒng)性能將有所增強(qiáng)。3、用數(shù)據(jù)窗口代替 SQL 語句通常,為了獲得某些數(shù)據(jù),采用數(shù)據(jù)窗口和 SQL 語句都是可行的,但是PB 對數(shù)據(jù)窗口和 SQL 語句采用不同的處理機(jī)制,因此,具有不同的效率。例:為里檢索電話檔案中的用戶名,可以利用 SQL 語句,將所有的數(shù)據(jù)檢索到一個(gè)多行編輯中,也可以檢索到一個(gè)數(shù)據(jù)窗口中。如果使用第一中方法:首先定義一個(gè)游標(biāo): DECLARE CUR
11、60;CURSOR FOR Select "DA_DH"."HM" FROM "DA_DH"然后可以: STRING stxt,st int li open cur &
12、#160;do li = li + 1 fetch cur into :stxtli st=st+stxtli + "rn" loop wh
13、ile stxtli"" close cur; mle_1.txt = st也可以使用第二種方法: dw_1.settransobject(sqlca) dw_1.retrieve() 利用 POWERBUILDER PROFILER 工具進(jìn)行檢查,對比兩種方法所需時(shí)間如下方法&
14、#160; 所需時(shí)間 (百分之一秒)SQL 語句 100.9857數(shù)據(jù)窗口 49.0133由于數(shù)據(jù)窗口或DATASTORE 使用了標(biāo)
15、準(zhǔn)的內(nèi)嵌的代碼,而不是有開發(fā)人員進(jìn)行全部編碼,同時(shí)編譯執(zhí)行的速度比解釋執(zhí)行的速度快的多,因此在開發(fā)過程中應(yīng)盡量使用數(shù)據(jù)窗口和DATASTORE. 即使是必須用SQL 語句的時(shí)候,也應(yīng)該盡量將它們定義為存儲過程(特別是在多用戶的環(huán)境中),以提高應(yīng)用程序的性能.二、數(shù)據(jù)窗口的編程和執(zhí)行數(shù)據(jù)窗口是PB最值得被稱道的, 其具有如下特點(diǎn):1. 多種顯示方式.2. 多種編輯方式.3. 使用方法簡單.4. 具有多種報(bào)表形式.5. 可實(shí)現(xiàn)屏幕滾動.6. 可實(shí)現(xiàn)數(shù)據(jù)的有效性校驗(yàn).7.
16、160;執(zhí)行性能顯著提高.8. 編程工作變少.9. 可以在數(shù)據(jù)窗口內(nèi)部實(shí)現(xiàn)數(shù)據(jù)哭的更新.下面, 我將介紹一些用于提高數(shù)據(jù)窗口性能的技術(shù).1. 減少連接數(shù)據(jù)庫的次數(shù)連庫操作是非常影響執(zhí)行速度的操作. 因此在程序中,一旦與數(shù)據(jù)庫連接后就應(yīng)當(dāng)盡量保持與數(shù)據(jù)庫的連接, 減少連接數(shù)據(jù)庫的次數(shù).PowerBuilder 提供里兩個(gè)函數(shù)來建立數(shù)據(jù)窗口與事務(wù)對象的連接: SetTrans()
17、; SetTransObject()在程序中應(yīng)當(dāng)盡量使用 SETTRANSOBJECT(), 因?yàn)镾ETTRANS() 函數(shù)在每次調(diào)用 RETRIEVE(), Update() 等函數(shù)之后, 都要執(zhí)行數(shù)據(jù)庫的連接和斷開操作.2. 下拉數(shù)據(jù)窗口與表的連接 對于數(shù)據(jù)庫服務(wù)器來說, 表的連接操作是一項(xiàng)非常大的開銷, 而 POWERBUILDER 提供的下拉數(shù)據(jù)窗口在某些情況下可以代替表的連接操作.例如,
18、 為了在數(shù)據(jù)窗口上顯示用戶的電話號碼和姓名:如果用表的連接的方法, 數(shù)據(jù)窗口對應(yīng)的 SQL 語句應(yīng)是這樣的: Select "DA_DH"."DHHM", "DA_HTH"."DWM"&
19、#160; FROM "DA_HTH", "DA_DH" Where ("DA_HTH"."DHHM"="DA_DH"."DHHM")同樣的程序可用下拉數(shù)據(jù)窗口來完成, 這里不再具
20、體介紹.但是, 應(yīng)當(dāng)注意, 以上兩種方法究竟哪一種數(shù)據(jù)更快, 與表的結(jié)構(gòu), 表的數(shù)量, 連接的方法等均有關(guān)系, 應(yīng)當(dāng)具體分析.3. 共享數(shù)據(jù)在一個(gè)應(yīng)用程序中, 某些數(shù)據(jù)需要頻繁的使用, 如果在每次使用時(shí)都從數(shù)據(jù)庫中進(jìn)行檢索, 則需占用大量的服務(wù)器資源和網(wǎng)絡(luò)資源. 為了減少開銷, 可以在客戶端對這些數(shù)據(jù)只進(jìn)行一次檢索, 然后允許其它任務(wù)共享這些數(shù)據(jù).例如, 如果有兩個(gè)數(shù)據(jù)窗口, 都需要從第三方表中檢索出用戶的電話號碼, 且此列用下拉數(shù)據(jù)窗
21、口給出. 如果每次都對電話號碼進(jìn)行檢索, 則性能較低. 因此, 可以單獨(dú)建立一個(gè)關(guān)于電話號碼的數(shù)據(jù)窗口. 在每次打開窗口時(shí), 首先將電話號碼檢索到此數(shù)據(jù)窗口中, 然后另外兩個(gè)數(shù)據(jù)窗口中關(guān)于電話號碼的下拉數(shù)據(jù)窗口可以共享此數(shù)據(jù)窗口中的數(shù)據(jù).在窗口的 OPEN 事件中編寫如下程序: dw_1.settransobject(sqlca)
22、 dw_2.settransobject(sqlca) dw_3.settransobject(sqlca) / 檢索 dw_1 dw_1.retrieve() / 使 DW
23、_2 的下拉數(shù)據(jù)窗口共享 DW_1 datawindowchild child1 dw_2.getchild('dhhm',child1) child1.settransobject(sqlca)
24、160; dw_1.sharedata(child1) / 使 DW_3 的下拉數(shù)據(jù)窗口共享 DW_1 datawindowchild child2 dw_3.getchild('dhhm',child2)
25、 child2.settransobject(sqlca) dw_1.sharedata(child2)使用這種方法, 避免了各個(gè)數(shù)據(jù)窗口間物理的拷貝數(shù)據(jù), 因此減少了空間上的開銷,提高了應(yīng)用程序的綜合性能.4. 數(shù)據(jù)窗口間數(shù)據(jù)的拷貝如果需要在數(shù)據(jù)窗口間共享數(shù)據(jù), 應(yīng)當(dāng)盡量使用 SHAREDATA() 函數(shù), 但是,SHAREDATA() 函數(shù)并不是物理地在數(shù)據(jù)窗口
26、間拷貝數(shù)據(jù), 如果在顯示數(shù)據(jù)的同時(shí), 還要對數(shù)據(jù)進(jìn)行操作, 則需要進(jìn)行數(shù)據(jù)的拷貝.例如, 要求將 DW_1 中選定的行拷貝到 DW_2 中: 在窗口的 OPEN 事件中編程: dw_1.settransobject(sqlca) dw_2.settransobjec
27、t(sqlca) dw_1.retrieve() 在數(shù)據(jù)窗口 DW_1 的 ROWFOCUSCHANGED 事件中編寫下列程序: long lr lr = dw_1.selectrow(0,false)
28、 lr = dw_1.getrow() lr = dw_1.selectrow(lr,true)要完成從 DW_1 到 DW_2 的拷貝工作, 有兩種方法:第一種:在按鈕 "拷貝" 的 CLICKED 事件中編程long lrlr =
29、0;dw_1.getselectedrow(0)dw_1.rowscopy(lr,lr,primary!,dw_2,100,primary!)執(zhí)行程序, 利用 POWERBUILDER PROFILER 得出所需時(shí)間為 1.7034(百分之一秒)第二種:在按鈕 "拷貝" 的 CLICKED 事件中編程dw_2.object.data = da_1.object.data.selected執(zhí)行程序, 利用 POWERBUILDER PRO
30、FILER 得出所需時(shí)間為 0.8062(百分之一秒)5. 數(shù)據(jù)窗口屬性的訪問和修改A. 數(shù)據(jù)窗口屬性的訪問 在程序中訪問數(shù)據(jù)窗口的屬性有下列幾種方法: A1. 采用點(diǎn)表達(dá)式訪問 A2. 應(yīng)用多個(gè)獨(dú)立的 DESCRIBE() 函數(shù)訪問 A3. 只使用一個(gè) DESCRIBE() 函數(shù), 采用復(fù)合參
31、數(shù)訪問多個(gè)屬性上面三中方法, 通常第一種方法最慢, 第三種方法最快.例如: 在窗口的 OPEN 事件中 DW_1.SETTRANSOBJECT(SQLCA) DW_1.RETRIEVE()第一種方法:在檢索按鈕的 CLICKED 事件中編程. string dx, dy, dh, dw
32、60; dx = dw_1.object.da_dh.x dy = dw_1.object.da_dh.y dx = dw_1.object.da_dh.height dy = dw_1.object.da_dh.width st_1.text =dx+","+dy+","+
33、dh+","+dw第二種方法: string dx, dy, dh, dw dx=dw_1.describe("da_dh.x") dx=dw_1.describe("da_dh.y") dx=dw_1.describe("da_dh.height")
34、0;dx=dw_1.describe("da_dh.width") st_1.text =dx+","+dy+","+dh+","+dw第三種方法: string dx, dy, dh, dw st_1.text=dw_1.describe("da_dh.x" +&
35、160; "da_dh.y" +& &
36、#160; "da_dh.height" +& "da_dh.width")實(shí)驗(yàn)證明, 第三種方法的速度
37、是最快的. 但是程序的可讀性最差.B. 數(shù)據(jù)窗口屬性的修改在程序中修改數(shù)據(jù)窗口的屬性有下列幾種方法: A1. 采用點(diǎn)表達(dá)式修改 A2. 應(yīng)用多個(gè)獨(dú)立的 MODIFY() 函數(shù)訪問 A3. 只使用一個(gè) MODIFY() 函數(shù), 采用復(fù)合參數(shù)訪問多個(gè)屬性上面三中方法, 通常第一種方法最慢, 第三種方法最快.例如:
38、0; 在窗口的 OPEN 事件中 DW_1.SETTRANSOBJECT(SQLCA) DW_1.RETRIEVE()第一種方法:在檢索按鈕的 CLICKED 事件中編程. DW_1.SETREDRAW(FALSE) dw_1.object.da_dh.x = 18 dw_1.object.da_d
39、h.y = 16 dw_1.object.da_dh.height = 100 dw_1.object.da_dh.width = 200 DW_1.setredraw(true) st_1.text =dx+","+dy+","+dh+","+dw第二種方法:
40、 DW_1.SETREDRAW(FALSE) dw_1.modify("da_dh.x = 18") dw_1.modify("da_dh.y = 16") dw_1.modify("da_dh.height = 100") dw_1.modify("da_dh.
41、width = 200") dw_1.setredraw(true)第三種方法: dw_1.modify("da_dh.x=18" +& "da_dh.y=16" +&
42、0; "da_dh.height=100" +& "da_dh.width=200")實(shí)驗(yàn)證明, 第三種方法的速度是最快的. 但是程序的可讀性最差.注意, 在方法一和方法二中,
43、160;都使用的 setredraw() 函數(shù)以減少屏幕的重繪, 否則, 執(zhí)行速度將嚴(yán)重下降.6. 數(shù)據(jù)窗口中數(shù)據(jù)的訪問在程序中, 經(jīng)常會需要動態(tài)的修改數(shù)據(jù)窗口中的數(shù)據(jù). 對此, PB提供了多種方法, 各種方法在性能上會有一些差異.A. 數(shù)據(jù)窗口中數(shù)據(jù)的訪問 目的: 將數(shù)據(jù)窗口中的電話號碼存放在一個(gè)數(shù)組中. 請比較下面兩中方法. 方法一:
44、 string da_dh long ll,i ll = dw_1.rowcount() for i = ll to 1 stet -1 da_dhi = dw_1.getitemstring(i,"dhhm")
45、0; next 方法二: string da_dh da_dh = dw_1.object.dhhm.current測試發(fā)現(xiàn), 第二種方法比第一種方法快將近一倍. 數(shù)據(jù)量越大這種差異越明顯.B. 數(shù)據(jù)窗口中數(shù)據(jù)的修改 目的: 修改數(shù)據(jù)窗口中的電話號碼列的值. 請比較下面兩中方法
46、. 方法一: dw_1.setitem(i,"dhhm",l_name) 方法二: dw_1.i = l_name測試發(fā)現(xiàn), 第二種方法比第一種方法快將近一倍. 數(shù)據(jù)量越大這種差異越明顯.7. 數(shù)據(jù)窗口事件對性能的影響對于數(shù)據(jù)窗口控制中經(jīng)常發(fā)生的事件, 應(yīng)當(dāng)盡量減少其中的程序代碼.特別是如下事件: A. itemchanged b. editchanged c. itemfo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 赴埃及漢語教師跨文化交際能力調(diào)查研究
- 綿羊肺炎支原體
- 影響初中生英語課堂心流體驗(yàn)的課堂活動因素研究
- 化療患者發(fā)熱護(hù)理常規(guī)
- 保險(xiǎn)行業(yè)健康人力發(fā)展策略
- 頸部護(hù)理課件
- 鼻綜合整形培訓(xùn)
- 精益管理培訓(xùn)心得匯報(bào)
- 預(yù)防艾滋病課件
- 預(yù)防登革熱班會課件
- 2024年中級經(jīng)濟(jì)師考試經(jīng)濟(jì)基礎(chǔ)知識必考重點(diǎn)總結(jié)全覆蓋
- 轉(zhuǎn)崗人員安全知識培訓(xùn)
- 寧夏石嘴山市礦業(yè)(集團(tuán))有限責(zé)任公司招聘筆試題庫2024
- 網(wǎng)絡(luò)設(shè)備安裝調(diào)試作業(yè)指導(dǎo)書
- 鐵嶺三支一扶真題2023
- 2024年省石棉縣人力資源和社會保障局關(guān)于公開考核招考綜合類事業(yè)單位工作人員高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 人工智能數(shù)據(jù)標(biāo)注 課件
- 骨折病的中醫(yī)分型及治療
- (高清版)TDT 1068-2022 國土空間生態(tài)保護(hù)修復(fù)工程實(shí)施方案編制規(guī)程
- 路面橋梁搶修知識培訓(xùn)課件
- 2023陜西省中考英語真題試卷和答案
評論
0/150
提交評論