版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Microsoft Visual FoxPro 的性能調(diào)整技巧 簡介 性能總是 Microsoft FoxPro 數(shù)據(jù)庫管理系統(tǒng)的 主要特點之一,尤其是在數(shù)據(jù)庫引擎方面。在介紹了 Microsoft Visual FoxPro 有關(guān)的數(shù)據(jù)庫開發(fā)系統(tǒng)以及 它相關(guān)的對象模型, 加強引擎, 還有客戶端 /服務(wù)器特性之后, 你就會發(fā)現(xiàn)整個產(chǎn)品的功能變得越來越強大了。然而強大的 另一面就是產(chǎn)品也變得越來越復(fù)雜了。因此,當開發(fā)越來越 強勁時,面向?qū)ο蟮膽?yīng)用程序使用遠程數(shù)據(jù)存儲器中的數(shù)據(jù) 變得越來越容易了,同時,應(yīng)用程序也變得更加慢了。 本文要為你介紹一些實踐技巧和技術(shù),幫助你改善你的應(yīng)用 程序的性能。只要
2、你在應(yīng)用程序中正確的使用了這些技術(shù), 你就能夠明顯改善你的用戶界面和數(shù)據(jù)訪問性能。 盡管應(yīng)用起來只有部分技巧結(jié)果比較明顯,我們還是希望我 們所介紹的能夠給你提供有用的信息,幫助你全面改善應(yīng)用 程序的性能。同時,我們希望你能夠把你的意見或經(jīng)驗反饋 給我們,這樣今后使用 Visual FoxPro 的開發(fā)者要提高應(yīng)用程 序的性能時就能獲得更多的幫助,這正如你的前人所做的一 樣。硬件配置在這一部分我們將介紹調(diào)整操作系統(tǒng)的技巧,經(jīng)過調(diào)整之后 操作系統(tǒng)將會與 Visual FoxPro 一起工作得更加和諧。 在某些 情況下你需要改變硬盤緩存器的值以達到優(yōu)化性能,從而滿 足應(yīng)用程序需要的目的。Micros
3、oft Windows 95 和 Windows NT 在大多數(shù)情況下 Microsoft Windows 95 和 Windows NT 操作系統(tǒng)與 Visual FoxPro 一起工作得非常好。唯 一的例外就是在 Windows NT Server 上運行 Visual FoxPro 。 因為 Windows NT Server 需要的內(nèi)存比 Visual FoxPro 想象的 還多,所以 Visual FoxPro 只能夠為自己超支分配內(nèi)存使用。 為了解決這種情況,你可以用 SYS( 3050)系統(tǒng)函數(shù)來調(diào)整 Visual FoxPro 的內(nèi)存緩沖區(qū),把它近似調(diào)整為它的缺省值的 三分之一
4、(詳情見內(nèi)存管理) 。例如,你可以把下面這一行 代碼添加到啟動編碼或者是 CONFIG .FPW 文件中去: =SYS (3050, VAL (SYS (3050, 1, 0) / 3) 本地數(shù)據(jù)性能Rushmore 和索引在 MSDN Library 的 Visual FoxPro Developer s Guide 中,第 十五章 優(yōu)化應(yīng)用程序 一文詳細地討論了 Rushmore 技術(shù)。下面再補充說明一些技巧。 使用索引使用索引能夠提高數(shù)據(jù)查詢的性能, 這是很明顯的。 在 VisualFoxPro 中,索引是樹形的數(shù)據(jù)結(jié)構(gòu), 所以在索引中查詢非常 快。Visual FoxPro 最獨特的方
5、面之一就是支持在索引中使用公 式。大多數(shù)數(shù)據(jù)庫管理系統(tǒng)( DBMSs )允許使用一個或更多 個字段進行查詢, 而 Visual FoxPro 允許在索引中使用任何公 式,甚至是用戶自定義的函數(shù)。不過你要注意的是,當你往表格中添加了很多的索引時,更 新和插入速度會比較慢, 因為此時 Visual FoxPro 要更新每一 個索引。通常,你只需要為那些在過濾器和匯合指令中使用 的數(shù)據(jù)建立索引。你要避免使用 FOR < 條件 > 或者 NOT < 條件 > 形式的索引公式,因為這些公式對于索引來說是不可優(yōu)化 的。例如:INDEX ON DELETED() TAG DEL是 R
6、ushmore 可優(yōu)化的,但是INDEX ON NOT DELETED()TAG NOTDEL 不是。作為一個查詢的特殊情況,當你不想刪掉記錄時,如 果你已經(jīng) SET DELETED ON ,那么使用第一個例子中的索引 公式會幫助你加快操作速度。如果你在公式中使用了一個FOR的句子,Visual FoxPro不會使用索引來達到最優(yōu)化。例如INDEX ON ORDNUM FOR DISCOUNT > 10 TAGORDDISC最后,注意不要使用那些只能用離散值的索引(如邏輯字段 等)。何時進行查詢 Rushmore 優(yōu)化?什么時候?qū)?Visual FoxPro 表格進行的查詢或者過濾要用R
7、ushmore 優(yōu)化, 以及什么時候只是需要部分地進行優(yōu)化, 這 些問題都很重要。Visual FoxPro 用 Rushmore 技術(shù)來優(yōu)化過濾條件,它會找尋 符合過濾器左邊表達式的索引關(guān)鍵表達式。通常,開發(fā)者們 會錯誤地試圖把一個索引的標記名與一個過濾器的表達式 的相匹配, 這樣只會發(fā)現(xiàn) Visual FoxPro 不能夠用這種方法進 行優(yōu)化。以下是一個錯誤地使用了索引的例子: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)化的等 級。SYS(3054)可以顯示也可以不顯示查詢的Rushmore優(yōu)化 等級。 SYS(3054,1) 表示顯示 Rushmore 優(yōu)化的等級,而 SYS(3054,0) 則表示不顯示 Rushmore 優(yōu)化的等級。 數(shù)據(jù)庫引擎性能特性主索引和侯選的索引在 FoxPro 2.x 中,用唯一的 ID 號來增
9、加記錄的典型技術(shù)就 是在你的關(guān)鍵字段中建立一個索引,要增加記錄時就運行一 個搜索程序來查看這個 ID 號是否已經(jīng)被使用了。雖然這個 方法已經(jīng)比較快了,但是它還不是最理想的。用 Primary 和 Candidate 關(guān)鍵字插入(或者更新) Visual FoxPro 表格中,這種方法是由數(shù)據(jù)庫引擎驗證的唯一 方法,它用于比較低的級別中,速度非常快。 用可區(qū)別的標記來提高性能在 Visual FoxPro 中,我們改進了查找具有通用特征 (指那些 有可區(qū)別標記的特征)的數(shù)據(jù)的方法。如果你的索引表達式 的結(jié)果不支持可區(qū)別的標記(如 B 或 M ),查找會快一些。 Non-Machine 比較順序n
10、on-Machine比較順序(如 General)比Machine比較順序慢 的原因有兩點:Non-Machine 的索引關(guān)鍵字比 Machine 的索引關(guān)鍵字長一倍, 因為它們要包含可區(qū)別的信息。Non-Machine 比較用了許多特別的規(guī)則來為特征值建立索 引,這樣它才能返回正確的結(jié)果。因為 Machine 比較順序相 對來說要快一些,所以它通常用于連接和查找,而其他的比 較順序通常用來為記錄排序。注意: Visual FoxPro 利用的索引僅僅是用 SET COLLATE 當 前的設(shè)置來建立的。因此,典型的解決方法是在主要的搜索 和分類字段中有兩個索引:SET COLLATE TO G
11、ENERALINDEX ON lastname TAG lastname&& sortindexSET COLLATE TO MACHINEINDEX ON lastname TAG _lastname&&seek/select index 如果你想要用相對來說比較快的 Machine 索引來對字段進行 查找,選擇或者連接, 請在進行之前使用 SET COLLATE TO MACHINE 。 Rushmore 會使用在 Machine 比較順序中建立 的索引,查找和選擇 /連接都非??臁S?SQL SELECT如果在 Machine 比較順序中完成了一個 SQL
12、 SELECT ,那么 任何 ORDER BY 或者 GROUP BY 都可以用 Machine 比較順 序。如果你要用 non-Machine 比較順序為結(jié)果記錄排序,你可以在這個比較順序中完成 SELECT ,當然這樣做比較慢, 也可以分兩步把它完成: 第一步:用 Machine 比較順序來選擇記錄。SET COLLATE TO MACHINE&& use only machine indexesSELECT * FROM table INTO CURSOR temp1 WHERE lastname = Mller第二步:用 General 比較順序為記錄排序。SET CO
13、LLATE TO GENERAL&& use only general indexesSELECT * FROM temp1 INTO TABLE output ORDER BY lastname新數(shù)據(jù)類型我們在 Visual FoxPro 中引進了幾個新的數(shù)據(jù)類型: DateTime, Integer, Double, 和 Currency 。所有這些類型的數(shù)據(jù)在硬盤上 將存為二進制數(shù)據(jù)(其中 Integer 是一個四個字節(jié)的二進制 值,其他的是八個字節(jié)的二進制值) 。這樣做有兩個優(yōu)點。第一個優(yōu)點是,因為存儲在硬盤上的數(shù) 據(jù)量比較?。ㄒ粋€八位的數(shù)作為 Numeric 來存儲要
14、占八個字 節(jié),而作為 Integer 來存儲則只要四個字節(jié)) ,所以從硬盤往內(nèi)存里調(diào)數(shù)據(jù)和索引時,一次能夠調(diào)更多的數(shù)據(jù)到內(nèi)存頁中 去,這樣速度就會比較快一些。第二個優(yōu)點是,無須進行數(shù) 據(jù)的傳送。 在內(nèi)部, 如果 Visual FoxPro 把整數(shù)看作四個字節(jié) 的二進制值, 那么需要把它轉(zhuǎn)換為數(shù)字才能以 ASCII 碼數(shù)據(jù) 的形式存儲在硬盤中。因而,每一次讀取數(shù)據(jù)都必須先從 ASCII 碼轉(zhuǎn)換成為二進制,然后再轉(zhuǎn)換回去。有了 Integers, Doubles, DateTimes, 和 Currency 幾種數(shù)據(jù)類型, 這種轉(zhuǎn)換就 不必要了,對數(shù)據(jù)的訪問自然就快了很多。 在新的數(shù)據(jù)類型中, I
15、nteger 對速度的影響最大。因此,只要 有可能,盡量地把主要的和外來的關(guān)鍵值設(shè)置為Integer 。好處就是:.DBF文件更小了,索引更小了,而連接就更快了 (這 也許才是最重要的) 。緩沖和事務(wù)處理 事務(wù)處理必須簡短??纯聪旅孢@個例子: BEGIN TRANSACTION DO FORM BIGFORM TO nResult IF nResult = IDCOMMITEND TRANSACTIONELSEROLLBACKENDIF 上面這個例子說明了什么?如果你認為這是一個操作的恰當?shù)氖聞?wù)處理的封裝,的確如此。但是,事務(wù)處理僅僅用于 限制數(shù)據(jù)的更新。如果你做的不僅僅是這些(如涉及用戶界
16、面甚至編程的概念像 CASE, WHILE, 或 IF 語句等),那么在 實際的數(shù)據(jù)更新過程中效率就會變得很低。 很明顯,這是因為在 Visual FoxPro 中如果要使用事務(wù)處理就 要求鎖住記錄。在事務(wù)處理和記錄更新的過程中,記錄被鎖 住,一直要等到事務(wù)處理被委托或者是反轉(zhuǎn)才能夠解開。即 使你在 UNLOCK 之后說明了要 RLOCK() 或者 FLOCK() ,記 錄也一直被鎖死著,直到 END TRANSACTION 或者 ROLLBACK 出現(xiàn)才會改變。進一步說,把記錄懸掛起來也 要求 Visual FoxPro 要把頭文件鎖住, 直到事務(wù)處理完成之后 才能夠解鎖。 (被委托或者是反
17、轉(zhuǎn)) 。因此,在一個大的,多 用戶的系統(tǒng)中,減少記錄被鎖死的持續(xù)時間是很關(guān)鍵的。所 以在上面這個例子中一個更加適當?shù)膽?yīng)用程序是: * Save method from the cmdSave command button. BEGIN TRANSACTIONUPDATE PRODUCTS SET reorder_amt = 0 ;WHERE discontinued = .T.END TRANSACTION 使用 SYS( 3051) 這個 SYS 函數(shù)控制時間的數(shù)量, 精度達到毫秒級, 經(jīng)過一次 不成功的鎖定嘗試之后, Visual FoxPro 在再次試圖鎖定一個記錄, 表格, 索引, 或
18、備忘錄之前會一直等待。 缺省值是 333毫秒。 如果在你的數(shù)據(jù)庫文件中有許多鎖定競爭,你只要把這個值 調(diào)大(最大是 1000 ),就能夠改善你的應(yīng)用程序的性能。這 樣你的應(yīng)用程序就不會把時間浪費在快速通過網(wǎng)絡(luò)進行鎖 定上了。不過,如果不希望鎖定競爭太高,你就要把這個值調(diào)低(最 小值是 100),這樣鎖定操作就會更快一些。遠程數(shù)據(jù)性能 從任何后端數(shù)據(jù)庫中檢索獲得數(shù)據(jù)都是很耗費時間的。為了 從一個服務(wù)器數(shù)據(jù)庫中檢索數(shù)據(jù),以下幾個步驟是必須的:客戶端向后端服務(wù)器數(shù)據(jù)庫提出查詢。 服務(wù)器分析并且編輯查詢條件。生成結(jié)果集。服務(wù)器通報客戶端結(jié)果已經(jīng)完成。 客戶端通過網(wǎng)絡(luò)從服務(wù)器上獲得數(shù)據(jù)。為了加快數(shù)據(jù)的檢
19、索(或更新)過程要用到許多技術(shù)。 只檢索你需要的數(shù)據(jù)一般來說,應(yīng)用程序中的一個函數(shù)單元(在大部分情況下是 一個表單或者報表)要訪問表格中所有的數(shù)據(jù)只是特殊情 況。建立一個遠程視圖,僅僅獲取(或者更新)你所需要的 字段和行,這樣通過線路所傳送大量數(shù)據(jù)的情況就會大大改 善。例如,如果你已經(jīng)建立了一個遠程視圖,它與一個表單 的四個控件綁定在一起(如客戶表格中的客戶標識號,公司 名,聯(lián)系方式,地址等) ,用這樣一個 SELECT 語句來執(zhí)行 視圖,如:SELECT * FROM customers 效率會很低,因為你檢索了大量不做要求的字段。如果用下 面這個 SELECT 語句來執(zhí)行視圖,效果會好一些
20、。SELECT customer_id, company, contact, address FROM customers使用 WHERE 子句 為了限制檢索(或者更新)的數(shù)據(jù)量,適當?shù)厥褂?WHERE 子句是有必要的。我們用同樣的例子來進行說明,如果你想 知道西北地區(qū)的客戶情況,使用下面這個 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 子句中使用運行時參數(shù)。例如,你能夠從任何區(qū)中檢索信息SELECT customer_id, company, contact, address FROM customersWHERE region = ?pcRegion這里 pcRegion 是參數(shù)的名字。 如果視圖只是用于檢索或者再 查詢必需的信息,這個參數(shù)應(yīng)該有(但不是必須有) 。 使用正確的更新準則View Designer 中的 Update Criteria 標簽使你能夠明確你想要 如何把視圖中的數(shù)據(jù)進行更新,插入和刪除。標簽中標有 SQL WHERE clause includes 的部分能夠讓 你控制 UPDATE 和 DELETE 操作中 WHERE 子句的內(nèi)容。 這對于控制后端的數(shù)據(jù)沖突以及性能都十分重要。考慮到上 面所提到的視圖并且假設(shè)關(guān)鍵字段是customer_id 。假設(shè)你想要更新除了關(guān)鍵字段之外的所有字段(這種情況不會經(jīng)常出 現(xiàn),因為改變關(guān)鍵字段就意味著做一次刪除再加上一次插 入)也就是 公司名 , 聯(lián)系方式 ,以及 地址 ?;谀阍?SQL WHERE cl
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44963-2024儲糧保水技術(shù)規(guī)范
- 電工電子技術(shù)(第3版) 課件 5.1.1 半導(dǎo)體及PN結(jié)
- 2024年新型節(jié)能型內(nèi)燃機項目資金需求報告
- 銀行風(fēng)險管理制度
- 采購合同管理及風(fēng)險防范制度
- 《供給與局部均衡》課件
- 保護古老文明-課件
- 《計算中心編制》課件
- 法學(xué)案例-洛克菲勒中心案例都市綜合體
- 《促銷督導(dǎo)入門指引》課件
- 世界文化遺產(chǎn)-樂山大佛課件
- 2022小學(xué)一年級數(shù)學(xué)活用從不同角度解決問題測試卷(一)含答案
- 博爾赫斯簡介課件
- 2021年山東交投礦業(yè)有限公司招聘筆試試題及答案解析
- 施工單位資料檢查內(nèi)容
- 大氣課設(shè)-酸洗廢氣凈化系統(tǒng)
- 學(xué)校校慶等大型活動安全應(yīng)急預(yù)案
- 檢測公司檢驗檢測工作控制程序
- 高血壓病例優(yōu)秀PPT課件
- 精密電主軸PPT課件
- C++課程設(shè)計設(shè)計一個排課程序
評論
0/150
提交評論