microsoftvisualfoxpro的性能調(diào)整技巧_第1頁(yè)
microsoftvisualfoxpro的性能調(diào)整技巧_第2頁(yè)
microsoftvisualfoxpro的性能調(diào)整技巧_第3頁(yè)
microsoftvisualfoxpro的性能調(diào)整技巧_第4頁(yè)
microsoftvisualfoxpro的性能調(diào)整技巧_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、MicrosoftVisualFoxPro的性能調(diào)整技巧MicrosoftVisualFoxPro的性能調(diào)整技巧簡(jiǎn)介性能總是Microsoft®FoxPro®數(shù)據(jù)庫(kù)管理系統(tǒng)的主要特點(diǎn)之一,尤其是在數(shù)據(jù)庫(kù)引擎方面。在介紹了MicrosoftVisualFoxPro™有關(guān)的數(shù)據(jù)庫(kù)開發(fā)系統(tǒng)以及它相關(guān)的對(duì)象模型,加強(qiáng)引擎,還有客戶端/服務(wù)器特性之后,你就會(huì)發(fā)現(xiàn)整個(gè)產(chǎn)品的功能變得越來(lái)越強(qiáng)大了。然而強(qiáng)大的另一面就是產(chǎn)品也變得越來(lái)越復(fù)雜了。因此,當(dāng)開發(fā)越來(lái)越強(qiáng)勁時(shí),面向?qū)ο蟮膽?yīng)用程序使用遠(yuǎn)程數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)變得越來(lái)越容易了,同時(shí),應(yīng)用程序也變得更加慢

2、了。本文要為你介紹一些實(shí)踐技巧和技術(shù),幫助你改善你的應(yīng)用程序的性能。只要你在應(yīng)用程序中正確的使用了這些技術(shù),你就能夠明顯改善你的用戶界面和數(shù)據(jù)訪問(wèn)性能。盡管應(yīng)用起來(lái)只有部分技巧結(jié)果比較明顯,我們還是希望我們所介紹的能夠給你提供有用的信息,幫助你全面改善應(yīng)用程序的性能。同時(shí),我們希望你能夠把你的意見或經(jīng)驗(yàn)反饋給我們,這樣今后使用VisualFoxPro的開發(fā)者要提高應(yīng)用程序的性能時(shí)就能獲得更多的幫助,這正如你的前人所做的一樣。硬件配置在這一部分我們將介紹調(diào)整操作系統(tǒng)的技巧,經(jīng)過(guò)調(diào)整之后操作系統(tǒng)將會(huì)與VisualFoxPro一起工作得更加和諧。在某些情況下你需要改變硬盤緩存器的值以達(dá)到優(yōu)化性能,從

3、而滿足應(yīng)用程序需要的目的。MicrosoftWindows95和WindowsNT在大多數(shù)情況下MicrosoftWindows®95和WindowsNT®操作系統(tǒng)與VisualFoxPro一起工作得非常好。唯一的例外就是在WindowsNTServer上運(yùn)行VisualFoxPro。因?yàn)閃indowsNTServer需要的內(nèi)存比VisualFoxPro想象的還多,所以VisualFoxPro只能夠?yàn)樽约撼Х峙鋬?nèi)存使用。為了解決這種情況,你可以用SYS(3050)系統(tǒng)函數(shù)來(lái)調(diào)整VisualFoxPro的內(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和索引在MSDNLibrary的VisualFoxProDevelopersGuide中,第十五章“優(yōu)化應(yīng)用程序”一文詳細(xì)地討論了Rushmore™技術(shù)。下面再補(bǔ)充說(shuō)明一些技巧。使用索引使用索引能夠提高數(shù)據(jù)查詢的性能,這是很明顯的。在VisualFoxPro中,索引是樹形的數(shù)據(jù)結(jié)構(gòu),所以在索引中查詢非??臁isualFoxPro最獨(dú)特的方面之一就是支持在索引

5、中使用公式。大多數(shù)數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMSs)允許使用一個(gè)或更多個(gè)字段進(jìn)行查詢,而VisualFoxPro允許在索引中使用任何公式,甚至是用戶自定義的函數(shù)。不過(guò)你要注意的是,當(dāng)你往表格中添加了很多的索引時(shí),更新和插入速度會(huì)比較慢,因?yàn)榇藭r(shí)VisualFoxPro要更新每一個(gè)索引。通常,你只需要為那些在過(guò)濾器和匯合指令中使用的數(shù)據(jù)建立索引。你要避免使用FOR<條件>或者NOT<條件>形式的索引公式,因?yàn)檫@些公式對(duì)于索引來(lái)說(shuō)是不可優(yōu)化的。例如:INDEXONDELETED()TAGDEL是Rushmore可優(yōu)化的,但是INDEXONNOTDE

6、LETED()TAGNOTDEL不是。作為一個(gè)查詢的特殊情況,當(dāng)你不想刪掉記錄時(shí),如果你已經(jīng)SETDELETEDON,那么使用第一個(gè)例子中的索引公式會(huì)幫助你加快操作速度。如果你在公式中使用了一個(gè)FOR的句子,VisualFoxPro不會(huì)使用索引來(lái)達(dá)到最優(yōu)化。例如INDEXONORDNUMFORDISCOUNT>10TAGORDDISC最后,注意不要使用那些只能用離散值的索引(如邏輯字段等)。何時(shí)進(jìn)行查詢Rushmore優(yōu)化?什么時(shí)候?qū)isualFoxPro表格進(jìn)行的查詢或者過(guò)濾要用Rushmore優(yōu)化,以及什么時(shí)候只是需要部分地進(jìn)行優(yōu)化,這些問(wèn)題都很重要。VisualFoxPr

7、o用Rushmore技術(shù)來(lái)優(yōu)化過(guò)濾條件,它會(huì)找尋符合過(guò)濾器左邊表達(dá)式的索引關(guān)鍵表達(dá)式。通常,開發(fā)者們會(huì)錯(cuò)誤地試圖把一個(gè)索引的標(biāo)記名與一個(gè)過(guò)濾器的表達(dá)式的相匹配,這樣只會(huì)發(fā)現(xiàn)VisualFoxPro不能夠用這種方法進(jìn)行優(yōu)化。以下是一個(gè)錯(cuò)誤地使用了索引的例子:USECUSTOMERINDEXONUPPER(contact)TAGnameSELECT*FROMcustomer;WHEREcontact="BILL"&&notoptimized.Noindexon"contact"以下是在過(guò)濾查詢中正確利用索引的方法:SELECT

8、*FROMcustomerWHEREUPPER(contact)="BILL"&&Optimized!你還可以用SYS(3054)函數(shù)來(lái)決定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ù)庫(kù)引擎性能特性主索引和侯選的索引在FoxPro2.x中,用唯一的ID號(hào)來(lái)增加記錄的典型技術(shù)就是在你的關(guān)鍵字段中建立一個(gè)索引,要增加記錄時(shí)就運(yùn)行一個(gè)搜索程序來(lái)查看這個(gè)ID號(hào)是否已經(jīng)被

9、使用了。雖然這個(gè)方法已經(jīng)比較快了,但是它還不是最理想的。用Primary和Candidate關(guān)鍵字插入(或者更新)VisualFoxPro表格中,這種方法是由數(shù)據(jù)庫(kù)引擎驗(yàn)證的唯一方法,它用于比較低的級(jí)別中,速度非???。用可區(qū)別的標(biāo)記來(lái)提高性能在VisualFoxPro中,我們改進(jìn)了查找具有通用特征(指那些有可區(qū)別標(biāo)記的特征)的數(shù)據(jù)的方法。如果你的索引表達(dá)式的結(jié)果不支持可區(qū)別的標(biāo)記(如B或M),查找會(huì)快一些。Non-Machine比較順序non-Machine比較順序(如General)比Machine比較順序慢的原因有兩點(diǎn):Non-Machine的索引關(guān)鍵字比Machine的索引關(guān)鍵字長(zhǎng)一倍,

10、因?yàn)樗鼈円蓞^(qū)別的信息。Non-Machine比較用了許多特別的規(guī)則來(lái)為特征值建立索引,這樣它才能返回正確的結(jié)果。因?yàn)镸achine比較順序相對(duì)來(lái)說(shuō)要快一些,所以它通常用于連接和查找,而其他的比較順序通常用來(lái)為記錄排序。注意:VisualFoxPro利用的索引僅僅是用SETCOLLATE當(dāng)前的設(shè)置來(lái)建立的。因此,典型的解決方法是在主要的搜索和分類字段中有兩個(gè)索引:SETCOLLATETO"GENERAL"INDEXONlastnameTAGlastname&&sortindexSETCOLLATETO"MACHINE"

11、INDEXONlastnameTAG_lastname&&seek/selectindex如果你想要用相對(duì)來(lái)說(shuō)比較快的Machine索引來(lái)對(duì)字段進(jìn)行查找,選擇或者連接,請(qǐng)?jiān)谶M(jìn)行之前使用SETCOLLATETO"MACHINE"。Rushmore會(huì)使用在Machine比較順序中建立的索引,查找和選擇/連接都非常快。用SQLSELECT如果在Machine比較順序中完成了一個(gè)SQLSELECT,那么任何ORDERBY或者GROUPBY都可以用Machine比較順序。如果你要用non-Machine比較順序?yàn)榻Y(jié)果記錄排序,你可以在這個(gè)比較順序中完成

12、SELECT,當(dāng)然這樣做比較慢,也可以分兩步把它完成:第一步:用"Machine"比較順序來(lái)選擇記錄。SETCOLLATETO"MACHINE"&&useonlymachineindexesSELECT*FROMtableINTOCURSORtemp1WHERElastname="Müller"第二步:用"General"比較順序?yàn)橛涗浥判?。SETCOLLATETO"GENERAL"&&useonlygeneral

13、indexesSELECT*FROMtemp1INTOTABLEoutputORDERBYlastname新數(shù)據(jù)類型我們?cè)赩isualFoxPro中引進(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來(lái)存儲(chǔ)要占八個(gè)字節(jié),而作為Integer來(lái)存儲(chǔ)則只要四個(gè)字節(jié)),所以從硬盤往內(nèi)存里調(diào)數(shù)據(jù)和索引時(shí),一次能夠調(diào)更多的數(shù)據(jù)到內(nèi)存頁(yè)中去,這樣速度就會(huì)比較

14、快一些。第二個(gè)優(yōu)點(diǎn)是,無(wú)須進(jìn)行數(shù)據(jù)的傳送。在內(nèi)部,如果VisualFoxPro把整數(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ù)的訪問(wèn)自然就快了很多。在新的數(shù)據(jù)類型中,Integer對(duì)速度的影響最大。因此,只要有可能,盡量地把主要的和外來(lái)的關(guān)鍵值設(shè)置為Integer。好處就是:.DBF文件更小了,索引更小了,而連接就更快了(這也許才是最重要的)。緩沖和事務(wù)處理事務(wù)

15、處理必須簡(jiǎn)短??纯聪旅孢@個(gè)例子:BEGINTRANSACTIONDOFORMBIGFORMTOnResultIFnResult=IDCOMMITENDTRANSACTIONELSEROLLBACKENDIF上面這個(gè)例子說(shuō)明了什么?如果你認(rèn)為這是一個(gè)操作的恰當(dāng)?shù)氖聞?wù)處理的封裝,的確如此。但是,事務(wù)處理僅僅用于限制數(shù)據(jù)的更新。如果你做的不僅僅是這些(如涉及用戶界面甚至編程的概念像CASE,WHILE,或IF語(yǔ)句等),那么在實(shí)際的數(shù)據(jù)更新過(guò)程中效率就會(huì)變得很低。很明顯,這是因?yàn)樵赩isualFoxPro中如果要使用事務(wù)處理就要求鎖住記錄。在事務(wù)處理和記錄更新的過(guò)程中,記錄被鎖住,一直要等到事務(wù)處理被

16、委托或者是反轉(zhuǎn)才能夠解開。即使你在UNLOCK之后說(shuō)明了要RLOCK()或者FLOCK(),記錄也一直被鎖死著,直到ENDTRANSACTION或者ROLLBACK出現(xiàn)才會(huì)改變。進(jìn)一步說(shuō),把記錄懸掛起來(lái)也要求VisualFoxPro要把頭文件鎖住,直到事務(wù)處理完成之后才能夠解鎖。(被委托或者是反轉(zhuǎn))。因此,在一個(gè)大的,多用戶的系統(tǒng)中,減少記錄被鎖死的持續(xù)時(shí)間是很關(guān)鍵的。所以在上面這個(gè)例子中一個(gè)更加適當(dāng)?shù)膽?yīng)用程序是:*SavemethodfromthecmdSavecommandbutton.BEGINTRANSACTIONUPDATEPRODUCTSSETreorder_amt=0;WHERE

17、discontinued=.T.ENDTRANSACTION使用SYS(3051)這個(gè)SYS函數(shù)控制時(shí)間的數(shù)量,精度達(dá)到毫秒級(jí),經(jīng)過(guò)一次不成功的鎖定嘗試之后,VisualFoxPro在再次試圖鎖定一個(gè)缺省值是 333記錄,表格,索引,或備忘錄之前會(huì)一直等待。毫秒。如果在你的數(shù)據(jù)庫(kù)文件中有許多鎖定競(jìng)爭(zhēng),你只要把這個(gè)值調(diào)大(最大是1000),就能夠改善你的應(yīng)用程序的性能。這樣你的應(yīng)用程序就不會(huì)把時(shí)間浪費(fèi)在快速通過(guò)網(wǎng)絡(luò)進(jìn)行鎖定上了。不過(guò),如果不希望鎖定競(jìng)爭(zhēng)太高,你就要把這個(gè)值調(diào)低(最小值是100),這樣鎖定操作就會(huì)更快一些。遠(yuǎn)程數(shù)據(jù)性能從任何后端數(shù)據(jù)庫(kù)中檢索獲得數(shù)據(jù)都是很耗費(fèi)時(shí)間的。為了從一個(gè)服務(wù)器

18、數(shù)據(jù)庫(kù)中檢索數(shù)據(jù),以下幾個(gè)步驟是必須的:客戶端向后端服務(wù)器數(shù)據(jù)庫(kù)提出查詢。服務(wù)器分析并且編輯查詢條件。生成結(jié)果集。服務(wù)器通報(bào)客戶端結(jié)果已經(jīng)完成??蛻舳送ㄟ^(guò)網(wǎng)絡(luò)從服務(wù)器上獲得數(shù)據(jù)。為了加快數(shù)據(jù)的檢索(或更新)過(guò)程要用到許多技術(shù)。只檢索你需要的數(shù)據(jù)一般來(lái)說(shuō),應(yīng)用程序中的一個(gè)函數(shù)單元(在大部分情況下是一個(gè)表單或者報(bào)表)要訪問(wèn)表格中所有的數(shù)據(jù)只是特殊情況。建立一個(gè)遠(yuǎn)程視圖,僅僅獲?。ɑ蛘吒拢┠闼枰淖侄魏托?,這樣通過(guò)線路所傳送大量數(shù)據(jù)的情況就會(huì)大大改善。例如,如果你已經(jīng)建立了一個(gè)遠(yuǎn)程視圖,它與一個(gè)表單的四個(gè)控件綁定在一起(如客戶表格中的客戶標(biāo)識(shí)號(hào),公司名,聯(lián)系方式,地址等),用這樣一個(gè)SELECT

19、語(yǔ)句來(lái)執(zhí)行視圖,如:SELECT*FROMcustomers效率會(huì)很低,因?yàn)槟銠z索了大量不做要求的字段。如果用下面這個(gè)SELECT語(yǔ)句來(lái)執(zhí)行視圖,效果會(huì)好一些。SELECTcustomer_id,company,contact,addressFROMcustomers使用WHERE子句為了限制檢索(或者更新)的數(shù)據(jù)量,適當(dāng)?shù)厥褂肳HERE子句是有必要的。我們用同樣的例子來(lái)進(jìn)行說(shuō)明,如果你想知道西北地區(qū)的客戶情況,使用下面這個(gè)SELECT語(yǔ)句:SELECTcustomer_id,company,contact,addressFROMcustomersWHEREregion=NORTHWESTWH

20、ERE子句中的參數(shù)VisualFoxPro中靈活的視圖和SQLPassThrough技術(shù)能夠讓你在SQLSELECT,SQLUPDATE,以及SQLDELETE語(yǔ)句的WHERE子句中使用運(yùn)行時(shí)參數(shù)。例如,你能夠從任何區(qū)中檢索信息SELECTcustomer_id,company,contact,addressFROMcustomersWHEREregion=?pcRegion這里pcRegion是參數(shù)的名字。如果視圖只是用于檢索或者再查詢必需的信息,這個(gè)參數(shù)應(yīng)該有(但不是必須有)。使用正確的更新準(zhǔn)則ViewDesigner中的UpdateCriteria標(biāo)簽使你能夠明確你想要如何把視圖中的數(shù)據(jù)進(jìn)行更新,插入和刪除。標(biāo)簽中標(biāo)有“SQLWHEREclauseincludes”的部分能夠讓你控制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)系方式”,以

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論