版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Microsoft Visual FoxPro 的性能調(diào)整技巧 簡(jiǎn)介 性能總是 Microsoft FoxPro 數(shù)據(jù)庫管理系統(tǒng)的 主要特點(diǎn)之一,尤其是在數(shù)據(jù)庫引擎方面。在介紹了 Microsoft Visual FoxPro 有關(guān)的數(shù)據(jù)庫開發(fā)系統(tǒng)以及 它相關(guān)的對(duì)象模型, 加強(qiáng)引擎, 還有客戶端 /服務(wù)器特性之后, 你就會(huì)發(fā)現(xiàn)整個(gè)產(chǎn)品的功能變得越來越強(qiáng)大了。然而強(qiáng)大的 另一面就是產(chǎn)品也變得越來越復(fù)雜了。因此,當(dāng)開發(fā)越來越 強(qiáng)勁時(shí),面向?qū)ο蟮膽?yīng)用程序使用遠(yuǎn)程數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù) 變得越來越容易了,同時(shí),應(yīng)用程序也變得更加慢了。 本文要為你介紹一些實(shí)踐技巧和技術(shù),幫助你改善你的應(yīng)用 程序的性能。只要
2、你在應(yīng)用程序中正確的使用了這些技術(shù), 你就能夠明顯改善你的用戶界面和數(shù)據(jù)訪問性能。 盡管應(yīng)用起來只有部分技巧結(jié)果比較明顯,我們還是希望我 們所介紹的能夠給你提供有用的信息,幫助你全面改善應(yīng)用 程序的性能。同時(shí),我們希望你能夠把你的意見或經(jīng)驗(yàn)反饋 給我們,這樣今后使用 Visual FoxPro 的開發(fā)者要提高應(yīng)用程 序的性能時(shí)就能獲得更多的幫助,這正如你的前人所做的一 樣。硬件配置在這一部分我們將介紹調(diào)整操作系統(tǒng)的技巧,經(jīng)過調(diào)整之后 操作系統(tǒng)將會(huì)與 Visual FoxPro 一起工作得更加和諧。 在某些 情況下你需要改變硬盤緩存器的值以達(dá)到優(yōu)化性能,從而滿 足應(yīng)用程序需要的目的。Micros
3、oft Windows 95 和 Windows NT 在大多數(shù)情況下 Microsoft Windows 95 和 Windows NT 操作系統(tǒng)與 Visual FoxPro 一起工作得非常好。唯 一的例外就是在 Windows NT Server 上運(yùn)行 Visual FoxPro 。 因?yàn)?Windows NT Server 需要的內(nèi)存比 Visual FoxPro 想象的 還多,所以 Visual FoxPro 只能夠?yàn)樽约撼Х峙鋬?nèi)存使用。 為了解決這種情況,你可以用 SYS( 3050)系統(tǒng)函數(shù)來調(diào)整 Visual FoxPro 的內(nèi)存緩沖區(qū),把它近似調(diào)整為它的缺省值的 三分之一
4、(詳情見內(nèi)存管理) 。例如,你可以把下面這一行 代碼添加到啟動(dòng)編碼或者是 CONFIG .FPW 文件中去: =SYS (3050, VAL (SYS (3050, 1, 0) / 3) 本地?cái)?shù)據(jù)性能Rushmore 和索引在 MSDN Library 的 Visual FoxPro Developer s Guide 中,第 十五章 優(yōu)化應(yīng)用程序 一文詳細(xì)地討論了 Rushmore 技術(shù)。下面再補(bǔ)充說明一些技巧。 使用索引使用索引能夠提高數(shù)據(jù)查詢的性能, 這是很明顯的。 在 VisualFoxPro 中,索引是樹形的數(shù)據(jù)結(jié)構(gòu), 所以在索引中查詢非常 快。Visual FoxPro 最獨(dú)特的方
5、面之一就是支持在索引中使用公 式。大多數(shù)數(shù)據(jù)庫管理系統(tǒng)( DBMSs )允許使用一個(gè)或更多 個(gè)字段進(jìn)行查詢, 而 Visual FoxPro 允許在索引中使用任何公 式,甚至是用戶自定義的函數(shù)。不過你要注意的是,當(dāng)你往表格中添加了很多的索引時(shí),更 新和插入速度會(huì)比較慢, 因?yàn)榇藭r(shí) Visual FoxPro 要更新每一 個(gè)索引。通常,你只需要為那些在過濾器和匯合指令中使用 的數(shù)據(jù)建立索引。你要避免使用 FOR < 條件 > 或者 NOT < 條件 > 形式的索引公式,因?yàn)檫@些公式對(duì)于索引來說是不可優(yōu)化 的。例如:INDEX ON DELETED() TAG DEL是 R
6、ushmore 可優(yōu)化的,但是INDEX ON NOT DELETED()TAG NOTDEL 不是。作為一個(gè)查詢的特殊情況,當(dāng)你不想刪掉記錄時(shí),如 果你已經(jīng) SET DELETED ON ,那么使用第一個(gè)例子中的索引 公式會(huì)幫助你加快操作速度。如果你在公式中使用了一個(gè)FOR的句子,Visual FoxPro不會(huì)使用索引來達(dá)到最優(yōu)化。例如INDEX ON ORDNUM FOR DISCOUNT > 10 TAGORDDISC最后,注意不要使用那些只能用離散值的索引(如邏輯字段 等)。何時(shí)進(jìn)行查詢 Rushmore 優(yōu)化?什么時(shí)候?qū)?Visual FoxPro 表格進(jìn)行的查詢或者過濾要用R
7、ushmore 優(yōu)化, 以及什么時(shí)候只是需要部分地進(jìn)行優(yōu)化, 這 些問題都很重要。Visual FoxPro 用 Rushmore 技術(shù)來優(yōu)化過濾條件,它會(huì)找尋 符合過濾器左邊表達(dá)式的索引關(guān)鍵表達(dá)式。通常,開發(fā)者們 會(huì)錯(cuò)誤地試圖把一個(gè)索引的標(biāo)記名與一個(gè)過濾器的表達(dá)式 的相匹配, 這樣只會(huì)發(fā)現(xiàn) Visual FoxPro 不能夠用這種方法進(jìn) 行優(yōu)化。以下是一個(gè)錯(cuò)誤地使用了索引的例子:USE CUSTOMERINDEX ON UPPER(contact) TAG nameSELECT * FROM customer ;WHERE contact=BILL && not optimi
8、zed. Noindex on contact 以下是在過濾查詢中正確利用索引的方法:SELECT * FROM customer WHERE UPPER(contact)=BILL && Optimized!你還可以用SYS(3054)函數(shù)來決定 Rushmore查詢優(yōu)化的等 級(jí)。SYS(3054)可以顯示也可以不顯示查詢的Rushmore優(yōu)化 等級(jí)。 SYS(3054,1) 表示顯示 Rushmore 優(yōu)化的等級(jí),而 SYS(3054,0) 則表示不顯示 Rushmore 優(yōu)化的等級(jí)。 數(shù)據(jù)庫引擎性能特性主索引和侯選的索引在 FoxPro 2.x 中,用唯一的 ID 號(hào)來增
9、加記錄的典型技術(shù)就 是在你的關(guān)鍵字段中建立一個(gè)索引,要增加記錄時(shí)就運(yùn)行一 個(gè)搜索程序來查看這個(gè) ID 號(hào)是否已經(jīng)被使用了。雖然這個(gè) 方法已經(jīng)比較快了,但是它還不是最理想的。用 Primary 和 Candidate 關(guān)鍵字插入(或者更新) Visual FoxPro 表格中,這種方法是由數(shù)據(jù)庫引擎驗(yàn)證的唯一 方法,它用于比較低的級(jí)別中,速度非???。 用可區(qū)別的標(biāo)記來提高性能在 Visual FoxPro 中,我們改進(jìn)了查找具有通用特征 (指那些 有可區(qū)別標(biāo)記的特征)的數(shù)據(jù)的方法。如果你的索引表達(dá)式 的結(jié)果不支持可區(qū)別的標(biāo)記(如 B 或 M ),查找會(huì)快一些。 Non-Machine 比較順序n
10、on-Machine比較順序(如 General)比Machine比較順序慢 的原因有兩點(diǎn):Non-Machine 的索引關(guān)鍵字比 Machine 的索引關(guān)鍵字長(zhǎng)一倍, 因?yàn)樗鼈円蓞^(qū)別的信息。Non-Machine 比較用了許多特別的規(guī)則來為特征值建立索 引,這樣它才能返回正確的結(jié)果。因?yàn)?Machine 比較順序相 對(duì)來說要快一些,所以它通常用于連接和查找,而其他的比 較順序通常用來為記錄排序。注意: Visual FoxPro 利用的索引僅僅是用 SET COLLATE 當(dāng) 前的設(shè)置來建立的。因此,典型的解決方法是在主要的搜索 和分類字段中有兩個(gè)索引:SET COLLATE TO G
11、ENERALINDEX ON lastname TAG lastname&& sortindexSET COLLATE TO MACHINEINDEX ON lastname TAG _lastname&&seek/select index 如果你想要用相對(duì)來說比較快的 Machine 索引來對(duì)字段進(jìn)行 查找,選擇或者連接, 請(qǐng)?jiān)谶M(jìn)行之前使用 SET COLLATE TO MACHINE 。 Rushmore 會(huì)使用在 Machine 比較順序中建立 的索引,查找和選擇 /連接都非???。用 SQL SELECT如果在 Machine 比較順序中完成了一個(gè) SQL
12、 SELECT ,那么 任何 ORDER BY 或者 GROUP BY 都可以用 Machine 比較順 序。如果你要用 non-Machine 比較順序?yàn)榻Y(jié)果記錄排序,你可以在這個(gè)比較順序中完成 SELECT ,當(dāng)然這樣做比較慢, 也可以分兩步把它完成: 第一步:用 Machine 比較順序來選擇記錄。SET COLLATE TO MACHINE&& use only machine indexesSELECT * FROM table INTO CURSOR temp1 WHERE lastname = Mller第二步:用 General 比較順序?yàn)橛涗浥判颉ET CO
13、LLATE TO GENERAL&& use only general indexesSELECT * FROM temp1 INTO TABLE output ORDER BY lastname新數(shù)據(jù)類型我們?cè)?Visual FoxPro 中引進(jìn)了幾個(gè)新的數(shù)據(jù)類型: DateTime, Integer, Double, 和 Currency 。所有這些類型的數(shù)據(jù)在硬盤上 將存為二進(jìn)制數(shù)據(jù)(其中 Integer 是一個(gè)四個(gè)字節(jié)的二進(jìn)制 值,其他的是八個(gè)字節(jié)的二進(jìn)制值) 。這樣做有兩個(gè)優(yōu)點(diǎn)。第一個(gè)優(yōu)點(diǎn)是,因?yàn)榇鎯?chǔ)在硬盤上的數(shù) 據(jù)量比較?。ㄒ粋€(gè)八位的數(shù)作為 Numeric 來存儲(chǔ)要
14、占八個(gè)字 節(jié),而作為 Integer 來存儲(chǔ)則只要四個(gè)字節(jié)) ,所以從硬盤往內(nèi)存里調(diào)數(shù)據(jù)和索引時(shí),一次能夠調(diào)更多的數(shù)據(jù)到內(nèi)存頁中 去,這樣速度就會(huì)比較快一些。第二個(gè)優(yōu)點(diǎn)是,無須進(jìn)行數(shù) 據(jù)的傳送。 在內(nèi)部, 如果 Visual FoxPro 把整數(shù)看作四個(gè)字節(jié) 的二進(jìn)制值, 那么需要把它轉(zhuǎn)換為數(shù)字才能以 ASCII 碼數(shù)據(jù) 的形式存儲(chǔ)在硬盤中。因而,每一次讀取數(shù)據(jù)都必須先從 ASCII 碼轉(zhuǎn)換成為二進(jìn)制,然后再轉(zhuǎn)換回去。有了 Integers, Doubles, DateTimes, 和 Currency 幾種數(shù)據(jù)類型, 這種轉(zhuǎn)換就 不必要了,對(duì)數(shù)據(jù)的訪問自然就快了很多。 在新的數(shù)據(jù)類型中, I
15、nteger 對(duì)速度的影響最大。因此,只要 有可能,盡量地把主要的和外來的關(guān)鍵值設(shè)置為Integer 。好處就是:.DBF文件更小了,索引更小了,而連接就更快了 (這 也許才是最重要的) 。緩沖和事務(wù)處理 事務(wù)處理必須簡(jiǎn)短??纯聪旅孢@個(gè)例子: BEGIN TRANSACTION DO FORM BIGFORM TO nResult IF nResult = IDCOMMITEND TRANSACTIONELSEROLLBACKENDIF 上面這個(gè)例子說明了什么?如果你認(rèn)為這是一個(gè)操作的恰當(dāng)?shù)氖聞?wù)處理的封裝,的確如此。但是,事務(wù)處理僅僅用于 限制數(shù)據(jù)的更新。如果你做的不僅僅是這些(如涉及用戶界
16、面甚至編程的概念像 CASE, WHILE, 或 IF 語句等),那么在 實(shí)際的數(shù)據(jù)更新過程中效率就會(huì)變得很低。 很明顯,這是因?yàn)樵?Visual FoxPro 中如果要使用事務(wù)處理就 要求鎖住記錄。在事務(wù)處理和記錄更新的過程中,記錄被鎖 住,一直要等到事務(wù)處理被委托或者是反轉(zhuǎn)才能夠解開。即 使你在 UNLOCK 之后說明了要 RLOCK() 或者 FLOCK() ,記 錄也一直被鎖死著,直到 END TRANSACTION 或者 ROLLBACK 出現(xiàn)才會(huì)改變。進(jìn)一步說,把記錄懸掛起來也 要求 Visual FoxPro 要把頭文件鎖住, 直到事務(wù)處理完成之后 才能夠解鎖。 (被委托或者是反
17、轉(zhuǎn)) 。因此,在一個(gè)大的,多 用戶的系統(tǒng)中,減少記錄被鎖死的持續(xù)時(shí)間是很關(guān)鍵的。所 以在上面這個(gè)例子中一個(gè)更加適當(dāng)?shù)膽?yīng)用程序是: * Save method from the cmdSave command button. BEGIN TRANSACTIONUPDATE PRODUCTS SET reorder_amt = 0 ;WHERE discontinued = .T.END TRANSACTION 使用 SYS( 3051) 這個(gè) SYS 函數(shù)控制時(shí)間的數(shù)量, 精度達(dá)到毫秒級(jí), 經(jīng)過一次 不成功的鎖定嘗試之后, Visual FoxPro 在再次試圖鎖定一個(gè)記錄, 表格, 索引, 或
18、備忘錄之前會(huì)一直等待。 缺省值是 333毫秒。 如果在你的數(shù)據(jù)庫文件中有許多鎖定競(jìng)爭(zhēng),你只要把這個(gè)值 調(diào)大(最大是 1000 ),就能夠改善你的應(yīng)用程序的性能。這 樣你的應(yīng)用程序就不會(huì)把時(shí)間浪費(fèi)在快速通過網(wǎng)絡(luò)進(jìn)行鎖 定上了。不過,如果不希望鎖定競(jìng)爭(zhēng)太高,你就要把這個(gè)值調(diào)低(最 小值是 100),這樣鎖定操作就會(huì)更快一些。遠(yuǎn)程數(shù)據(jù)性能 從任何后端數(shù)據(jù)庫中檢索獲得數(shù)據(jù)都是很耗費(fèi)時(shí)間的。為了 從一個(gè)服務(wù)器數(shù)據(jù)庫中檢索數(shù)據(jù),以下幾個(gè)步驟是必須的:客戶端向后端服務(wù)器數(shù)據(jù)庫提出查詢。 服務(wù)器分析并且編輯查詢條件。生成結(jié)果集。服務(wù)器通報(bào)客戶端結(jié)果已經(jīng)完成。 客戶端通過網(wǎng)絡(luò)從服務(wù)器上獲得數(shù)據(jù)。為了加快數(shù)據(jù)的檢
19、索(或更新)過程要用到許多技術(shù)。 只檢索你需要的數(shù)據(jù)一般來說,應(yīng)用程序中的一個(gè)函數(shù)單元(在大部分情況下是 一個(gè)表單或者報(bào)表)要訪問表格中所有的數(shù)據(jù)只是特殊情 況。建立一個(gè)遠(yuǎn)程視圖,僅僅獲?。ɑ蛘吒拢┠闼枰?字段和行,這樣通過線路所傳送大量數(shù)據(jù)的情況就會(huì)大大改 善。例如,如果你已經(jīng)建立了一個(gè)遠(yuǎn)程視圖,它與一個(gè)表單 的四個(gè)控件綁定在一起(如客戶表格中的客戶標(biāo)識(shí)號(hào),公司 名,聯(lián)系方式,地址等) ,用這樣一個(gè) SELECT 語句來執(zhí)行 視圖,如:SELECT * FROM customers 效率會(huì)很低,因?yàn)槟銠z索了大量不做要求的字段。如果用下 面這個(gè) SELECT 語句來執(zhí)行視圖,效果會(huì)好一些
20、。SELECT customer_id, company, contact, address FROM customers使用 WHERE 子句 為了限制檢索(或者更新)的數(shù)據(jù)量,適當(dāng)?shù)厥褂?WHERE 子句是有必要的。我們用同樣的例子來進(jìn)行說明,如果你想 知道西北地區(qū)的客戶情況,使用下面這個(gè) SELECT 語句: SELECT customer_id, company, contact, address FROM customersWHERE region = NORTHWESTWHERE 子句中的參數(shù)Visual FoxPro 中靈活的視圖和 SQL Pass Through 技術(shù)能夠讓
21、你在 SQL SELECT, SQL UPDATE, 以及 SQL DELETE 語句 的 WHERE 子句中使用運(yùn)行時(shí)參數(shù)。例如,你能夠從任何區(qū)中檢索信息SELECT customer_id, company, contact, address FROM customersWHERE region = ?pcRegion這里 pcRegion 是參數(shù)的名字。 如果視圖只是用于檢索或者再 查詢必需的信息,這個(gè)參數(shù)應(yīng)該有(但不是必須有) 。 使用正確的更新準(zhǔn)則View Designer 中的 Update Criteria 標(biāo)簽使你能夠明確你想要 如何把視圖中的數(shù)據(jù)進(jìn)行更新,插入和刪除。標(biāo)簽中標(biāo)有 SQL WHERE clause includes 的部分能夠讓 你控制 UPDATE 和 DELETE 操作中 WHERE 子句的內(nèi)容。 這對(duì)于控制后端的數(shù)據(jù)沖突以及性能都十分重要??紤]到上 面所提到的視圖并且假設(shè)關(guān)鍵字段是customer_id 。假設(shè)你想要更新除了關(guān)鍵字段之外的所有字段(這種情況不會(huì)經(jīng)常出 現(xiàn),因?yàn)楦淖冴P(guān)鍵字段就意味著做一次刪除再加上一次插 入)也就是 公司名 , 聯(lián)系方式 ,以及 地址 ?;谀阍?SQL WHERE cl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大大一班數(shù)學(xué)試卷
- 不同位勢(shì)下擬線性薛定諤方程解的存在性問題
- PARP抑制劑對(duì)骨肉瘤X射線-碳離子放療增敏和腫瘤免疫增效的機(jī)制研究
- 五元體系K+,NH4+-Cl-,H2PO4-,(NH2)2CO-H2O共結(jié)晶的研究
- 2025年度贍養(yǎng)老人醫(yī)療費(fèi)用分?jǐn)偧白优?zé)任合同
- 2025年度餐飲企業(yè)員工健康保險(xiǎn)勞動(dòng)合同
- 2025年度防火卷簾門行業(yè)質(zhì)量監(jiān)督與認(rèn)證服務(wù)合同
- 二零二五年度研究生定向培養(yǎng)協(xié)議書:智能制造與自動(dòng)化專業(yè)研究生定向培養(yǎng)協(xié)議
- 2025年度道路養(yǎng)護(hù)項(xiàng)目竣工驗(yàn)收合同
- 2025年度父母贈(zèng)與子女保險(xiǎn)理賠資金贈(zèng)與協(xié)議
- 乳腺癌的綜合治療及進(jìn)展
- 【大學(xué)課件】基于BGP協(xié)議的IP黑名單分發(fā)系統(tǒng)
- 2025年八省聯(lián)考高考語文試題真題解讀及答案詳解課件
- 信息安全意識(shí)培訓(xùn)課件
- 2024年山東省泰安市初中學(xué)業(yè)水平生物試題含答案
- 美的MBS精益管理體系
- 中國(guó)高血壓防治指南(2024年修訂版)解讀課件
- 2024安全員知識(shí)考試題(全優(yōu))
- 法律訴訟及咨詢服務(wù) 投標(biāo)方案(技術(shù)標(biāo))
- 格式塔心理咨詢理論與實(shí)踐
- 英語六級(jí)詞匯(全)
評(píng)論
0/150
提交評(píng)論