四虎成人免费视频,国产一级a作爱视频免费观9看,色五月丁香亚洲,亚洲欧美性爱在线视频,1000部黄片免费观看一区,国产亚洲性生活视频播放,三级黄色在线视频网站

現(xiàn)在位置:范文先生網(wǎng)>理工論文>計算機論文>如何提高Visual FoxPro的性能

如何提高Visual FoxPro的性能

時間:2023-02-20 22:44:20 計算機論文 我要投稿
  • 相關(guān)推薦

如何提高Visual FoxPro的性能

摘要:本文介紹一些實用技巧和技術(shù)。如果我們能正確地應(yīng)用這些技術(shù),就可以大大改進Visual FoxPro的性能,提高數(shù)據(jù)的訪問速度。
關(guān)鍵詞:Visual FoxPro ;性能;技術(shù)

高性能是 Microsoft FoxPro數(shù)據(jù)庫管理系統(tǒng)(特別是它的數(shù)據(jù)庫引擎)的最大特點。Visual
FoxPro關(guān)系型數(shù)據(jù)庫引進了對象模型,提高了引擎的存取速度并增強了客戶/服務(wù)器特性,因此整個管理系統(tǒng)的功能變得更加強大。但是,這些強大功能的代價是使管理系統(tǒng)變得更加復(fù)雜。因此,一方面,很容易開發(fā)出性能穩(wěn)定、面向?qū)ο、使用遠程數(shù)據(jù)的應(yīng)用程序,另一方面,也很難避免出現(xiàn)低性能的應(yīng)用程序。
本文從改善、提高Visual FoxPro性能的目標出發(fā),介紹一些實用技巧和技術(shù)。

一、改善本地數(shù)據(jù)訪問的性能
1.使用索引
Visual
FoxPro中的索引是基于樹的數(shù)據(jù)結(jié)構(gòu),因此查詢經(jīng)過索引的表是很快的。但當表中有較多的索引時,更新表和向表中輸入數(shù)據(jù)就會變得慢一些,因為
Visual FoxPro 需要更新每個索引。通常,只需在用于篩選和聯(lián)接的數(shù)據(jù)上建立索引。
應(yīng)該避免以 FOR <條件> 或 NOT <條件> 這樣的形式建立索引表達式,因為這些表達式無法優(yōu)化。例如:INDEX ON DELETED
() TAG DEL是可以進行 Rushmore 優(yōu)化的,但是,INDEX ON NOT DELETED ()TAG
NOTDEL則不能。在特殊情況下,我們不想包含被刪除的記錄,可以先設(shè)置 SET DELETED ON,再創(chuàng)建索引,這樣可以加速操作。
此外,注意不要在那些只有少數(shù)離散數(shù)據(jù)中取值的字段(例如邏輯型字段)上建立索引。
2.優(yōu)化查詢的條件
Visual FoxPro 通過查找與篩選表達式左邊相匹配的索引表達式來優(yōu)化篩選條件。我們經(jīng)常試圖將索引的標識名與一個篩選表達式相匹配,而
Visual FoxPro 無法通過這種方式優(yōu)化查詢。下面使用的索引是錯誤的:
USE CUSTOMERS
INDEX ON UPPER(cu_name) TAG name
SELECT * FROM customers ;
WHERE cu_name="BILL" && not optimized. No index on "cu_name"
在一個篩選的查詢中正確使用索引的方法是∶
SELECT * FROM customers WHERE UPPER(cu_name)="BILL" && Optimized!
3.使用 SYS(3051) 函數(shù)
SYS(3051)S 函數(shù)控制從一個記錄(表、索引或備注文件)的鎖定失敗到再次嘗試鎖定它之間的時間間隔,以毫秒為單位,默認值為 333
毫秒。
如果在我們的系統(tǒng)中存在大量的鎖定競爭,可以將這個值調(diào)大(最大值為
1000),以提高我們應(yīng)用程序的性能,因為應(yīng)用程序不會因徒勞鎖定記錄而浪費時間。但是,如果鎖定競爭不多,應(yīng)將該值調(diào)。ㄗ钚≈禐
100),以加速記錄鎖定的嘗試。
4.注音標記和機器排序序列
在 Visual FoxPro
中,已經(jīng)改進了查詢包含國際化字符(帶有區(qū)分標記的字符)數(shù)據(jù)的優(yōu)化方式。但如果我們的索引表達式的結(jié)果包含的字符都不帶注音標記(例如 B 或
M),則查詢還能更快。

非機器排序序列(例如“通用”排序序列)比機器排序序列慢,有下列幾個原因:非機器索引關(guān)鍵字的大小是機器索引關(guān)鍵字的兩倍,因為必須為每個字符記錄注音信息;為了返回正確的結(jié)果,非機器排序序列要使用很多特定的規(guī)則來斷定索引的順序。因為機器排序序列更快,所以它通常用于聯(lián)接和查找,而其他排序序列用于排序記錄。
5.使事務(wù)安排緊湊
事務(wù)應(yīng)該只包含更新數(shù)據(jù)操作,在事務(wù)中包含其他任何操作(如使用我們界面,使用編程結(jié)構(gòu)的 CASE、WHILE 或 IF
語句)都會降低更新數(shù)據(jù)的效率。
這對于 Visual FoxPro
是很重要的,因為使用事務(wù)需要鎖定記錄。在事務(wù)中以及更新記錄時會鎖定記錄,并且在提交或回滾事務(wù)之前不會釋放這些鎖定的記錄。即使我們使用了 RLOCK
() 或 FLOCK (),然后執(zhí)行 UNLOCK,記錄在 END TRANSACTION 或 ROLLBACK
語句之前也一直保持鎖定。另外,在追加記錄時需要 Visual FoxPro
鎖定標頭(即其他我們可以修改,但不能添加或刪除),并且在事務(wù)結(jié)束(提交或回滾)之前一直鎖定標頭。因此,在一個高容量多我們的系統(tǒng)中,減少鎖定記錄的時間就變得很關(guān)鍵。
6.使用新的數(shù)據(jù)類型
在 Visual FoxPro
中引入了四種新數(shù)據(jù)類型∶日期時間型、整型、雙精度型和貨幣型。所有這些類型的數(shù)據(jù)都以二進制數(shù)據(jù)的形式保存在磁盤上(整型是四字節(jié)的二進制數(shù)據(jù),其他數(shù)據(jù)類型是八字節(jié)的二進制數(shù)據(jù))。
使用這些數(shù)據(jù)類型有兩個優(yōu)點:首先,由于在磁盤上保存數(shù)據(jù)時所占的空間更。ㄒ粋八位數(shù)的數(shù)據(jù)若用數(shù)值型保存將占用八個字節(jié),而保存為整形只需要四個字節(jié)),這樣,從磁盤向內(nèi)存加載數(shù)據(jù)和索引時,一次可以加載更多的有用數(shù)據(jù),從而提高應(yīng)用程序的性能。第二個優(yōu)點是不需要任何的數(shù)據(jù)轉(zhuǎn)換。Visual
FoxPro 內(nèi)部將整型數(shù)據(jù)表示為四字節(jié)的二進制值,而數(shù)值型數(shù)據(jù)在磁盤上保存為 ASCII 碼形式,因此,在每次讀數(shù)據(jù)時,都必須將 ASCII
碼轉(zhuǎn)換為二進制值,存盤時再轉(zhuǎn)換回去。由于整型和雙精度型數(shù)據(jù)(以及日期型和貨幣型數(shù)據(jù))不需要這種轉(zhuǎn)換,所以數(shù)據(jù)訪問就更快。
在新數(shù)據(jù)類型中,整型數(shù)據(jù)對速度的影響最大。要盡量使用整型數(shù)據(jù)作為主關(guān)鍵字和外部關(guān)鍵字的值。這樣可以得到更小的 DBF
文件,更小的索引,更快的連接。

二、提高遠程數(shù)據(jù)訪問的性能
在任何后端數(shù)據(jù)庫中檢索數(shù)據(jù)是很費時的。為了加快數(shù)據(jù)的下載(或更新),可使用下面的方法。
1.只下載需要的數(shù)據(jù)

在一個應(yīng)用程序的功能單元(比如,表單或報表)中,很少需要訪問表中的所有數(shù)據(jù)。通過創(chuàng)建遠程視圖,只得到(或更新)我們需要的字段和記錄,就可以減少通過網(wǎng)絡(luò)的數(shù)據(jù)數(shù)量。例如,在我們的表單上有四個控件,分別綁定了遠程視圖的字段(客戶標識號、公司名、聯(lián)系人和來自客戶表的地址),可使用SELECT
customer_id, company, contact, address FROM customers SELECT則會好得多。
2.使用一個 WHERE 子句
為了進一步限制下載(或更新)的數(shù)據(jù)數(shù)量,可以使用 WHERE 子句。對于上面的示例,如果我們只需要西南部的客戶記錄,我們視圖的 SELECT
語句可以是:
SELECT cu

stomer_id, company, contact, address FROM customers
WHERE region = 'NORTHWEST'
Visual FoxPro 提供的視圖靈活性以及 SQL Pass Through 技術(shù)使我們可以在 SELECT、UPDATE 和
DELETE 等 SQL 語句的 WHERE 子句中使用參數(shù)。例如,對于上例,我們可以使用參數(shù)在運行時刻下載任何地區(qū)的信息:
SELECT customer_id, company, contact, address FROM customers
WHERE region = ?pcRegion
式中,“pcRegion”是參數(shù)的名稱。
3.使用正確的更新條件
視圖設(shè)計器中的“更新條件”選項卡允許我們指定視圖中的數(shù)據(jù)如何被更新(插入和刪除)。在選項卡中的“SQL WHERE
子句包括”部分,我們可以控制 UPDATE 和 DELETE 操作中 WHERE
子句的內(nèi)容。這對于在后端控制數(shù)據(jù)沖突是很關(guān)鍵的,對于改善性能也是很重要的。

因為我們向后端更新的字段總是可更新字段的子集(并且一定是視圖中字段總數(shù)的子集),在大多數(shù)情況下都使用“關(guān)鍵字和已修改字段”選項。對于支持時間戳的服務(wù)器數(shù)據(jù)庫,建議使用“關(guān)鍵字和時間戳”設(shè)置,這種更新方式比用“關(guān)鍵字和已修改字段”更快。
4.使用 BatchUpdateCount 屬性
有些服務(wù)器 (例如 Microsoft SQL ServerServer ) 允許我們在一個單獨的數(shù)據(jù)包中發(fā)送一批 SQL
語句,這個技術(shù)加速更新、刪除和插入,因為通過網(wǎng)絡(luò)傳送的網(wǎng)絡(luò)包的絕對數(shù)量減少了,而且服務(wù)器數(shù)據(jù)庫可以成批編譯多個語句而不是單獨編譯。
我們應(yīng)該對于這個屬性和 PacketSize
屬性用不同的值來試驗,以優(yōu)化我們的更新。可以在“查詢”菜單的“高級選項”對話框中設(shè)置該屬性,或者通過 DBSETPROP () 或
CURSORSETPROP () 函數(shù)來設(shè)置。注意若要使用這個屬性,必須通過調(diào)用 DBSETPROP () 或 SQLSETPROP ()
函數(shù)設(shè)置“Transactions”屬性來啟動人工事務(wù)。
5.使用 PacketSize 屬性
PacketSize屬性控制向數(shù)據(jù)庫服務(wù)器傳送和下載的網(wǎng)絡(luò)包的大。ò凑兆止(jié))。它實際上是由 ODBC
設(shè)置的,并且可以是任何非零值。不同的網(wǎng)絡(luò)對該屬性有不同的處理,因此我們應(yīng)該參閱網(wǎng)絡(luò)服務(wù)文檔。該屬性的默認值是 4096
字節(jié)。如果我們的網(wǎng)絡(luò)支持更大的數(shù)據(jù)包,我們可以在每次請求 (SELECT、INSERT、UPDATE、DELETE)
時將該屬性值增加以加大網(wǎng)絡(luò)吞吐量。
6.使用 FetchMemo 屬性
FetchMemo屬性控制當從后端取得一個記錄時是否也取得備注和二進制(通用字段)數(shù)據(jù)。請將該屬性設(shè)置為
.F.,這樣,直到真正需要時,才從網(wǎng)絡(luò)傳遞數(shù)據(jù),從而提高我們的查詢?nèi)〉脭?shù)據(jù)的速度。
7.在本地機上保存查閱表

在很多情況下,我們的應(yīng)用程序經(jīng)常訪問只讀數(shù)據(jù)。例如,我們的應(yīng)用程序可能會經(jīng)常使用一個包括各個公司人員的檔案表,將這些數(shù)據(jù)保存在本地機上(也就是,不把這些表裝在服務(wù)器上),查詢會更快。對于從不更改或很少更改的數(shù)據(jù),這個技術(shù)會很有用。
8.使用本地規(guī)則
幾乎很少有人知道,Visual FoxPro
在本地和遠程視圖中也支持字段級和記錄級規(guī)則。這些規(guī)則是為了防止與數(shù)據(jù)或商業(yè)規(guī)則不符的數(shù)據(jù)進入數(shù)據(jù)庫?梢詫⑦@些規(guī)則放在視圖中,而不僅僅放在后端表中,這樣作的好處是:在無效數(shù)據(jù)通過網(wǎng)絡(luò)傳送之前就可捕獲它。缺點是:這些規(guī)則并不自動與后端服務(wù)器表上的規(guī)則相匹配。因此,如果后端表規(guī)則更改了定義,必須人工更改本地定義的視圖中的規(guī)則。但是,如果規(guī)則很簡單,這也不是一個很大的負擔(dān)。另外,規(guī)則定義并不經(jīng)常改變,因此我們也不必擔(dān)心會經(jīng)常更新本地的規(guī)則。

三、改造表單對象性能
1.使用數(shù)據(jù)環(huán)境
在“表單設(shè)計器”或“報表設(shè)計器”中使用數(shù)據(jù)環(huán)境,則打開表和在表間建立關(guān)系的速度會比在表單的 Load 事件中使用 USE、SET ORDER
和 SET RELATION 命令快得多。這是因為 Visual FoxPro 使用底層的系統(tǒng)調(diào)用來打開表并建立索引和關(guān)系。
2.限制表單集中表單的數(shù)目
只有在必須讓一組表單共享一個私有數(shù)據(jù)工作期時才使用表單集。當我們運行一個表單集時,即使只顯示了表單集的第一個表單,Visual FoxPro
也會創(chuàng)建表單集中所有表單和所有表單中的所有控件,這樣很費時間。如果表單不必共享一個私有數(shù)據(jù)工作期,這樣做是不必要的。我們應(yīng)該建立獨立的表單并在需要它們時執(zhí)行
DO FORM 命令。
當然,如果使用了表單集,在訪問表單集中的表單時也會得到些好處。因為所有表單已被加載到內(nèi)存中了,只是沒有顯示,所以顯示表單會比較快。
3.向頁框中動態(tài)加載頁面控件

與表單集類似,當加載頁框時,也加載了每個頁面上的所有控件,從而降低了性能。我們可以創(chuàng)建頁框中每個頁面上控件的類來解決這個問題。使用這個技術(shù),由于直到訪問時才加載頁框中第二及其他頁面上的控件,所以可以加速表單的加載。
4.動態(tài)綁定控件與數(shù)據(jù)
對于一個包含很多與數(shù)據(jù)綁定的控件的表單,如果我們將綁定的時間延遲到需要的時候,也可以極大地提高表單的性能。
我們可以將表單使用的表和視圖放在數(shù)據(jù)環(huán)境中,這樣當加載表單時表和視圖就打開了。然后,當一個控件(例如組合框)獲得焦點時,我們可以將控件與數(shù)據(jù)值綁定。
5.使用 LockScreen屬性

任何對表單上控件的更改,這個屬性允許我們延遲屏幕刷新。例如,使控件可見或不可見,更改控件顏色,或者在綁定型控件中移動記錄,都可以用這個屬性將它們延遲到所有更改都結(jié)束時再刷新,這樣系統(tǒng)的效率會更高。
6.在視圖中使用 NoDataOnLoad 屬性
視圖的數(shù)據(jù)環(huán)境臨時表對象的 NoDataOnLoad 屬性與視圖的 USE 命令的 NODATA
子句的作用相同。它打開視圖,但是視圖不取得任何數(shù)據(jù)。對于本地和遠程視圖都是如此。例如,我們有一個有關(guān)客戶信息的表單,它使用一個包含客戶信息的視圖,該視圖使用參數(shù)代替
customer_id 的具體值。我們可以輸入一個有效的 customer_id,然后按下“搜索”按鈕。

這樣做的優(yōu)點是表單的加載時間大大減少了,因為視圖不給我們帶來任何數(shù)據(jù),但是與視圖字段綁定的控件仍是綁定的,因為存在一個打開的工作區(qū)(只是其中沒有數(shù)據(jù))。

四、完善OLE 的性能
在訪問 OLE 數(shù)據(jù)之前先運行 OLE 服務(wù)程序。如果與通用字段數(shù)據(jù)類型相應(yīng)的服務(wù)器(例如 Microsof

t Excel 或
Word)在客戶機的計算機上已經(jīng)運行了,則與通用字段綁定的控件通常會獲得更好的性能。
1.自動化的性能
在某些情況下,即使已經(jīng)運行了一個實例,OLE 服務(wù)器(例如 Microsoft
Excel)仍然經(jīng)常啟動另一個新的實例。要想改變這種情況(并提高性能),請使用 GetObject 函數(shù)而不要使用 CreateObject
函數(shù)。例如,下面的調(diào)用:x = GetObject (, "excel.Application")總是使用一個已存在的實例,但是,x =
CreateObject ("excel.Application")將創(chuàng)建一個新的實例。
如果我們調(diào)用了 GetObject() 函數(shù),而服務(wù)器還沒有運行,系統(tǒng)會返回一個錯誤。我們可以俘獲這個錯誤并在錯誤處理程序中調(diào)用
CreateObject() 函數(shù)。
2.不使用 MEMLIMIT
Visual FoxPro 不能識別 MEMLIMIT。在 FoxPro 中,MEMLIMIT 是一個配置設(shè)置,指定 FoxPro
分配供自己使用的最大內(nèi)存數(shù)。不要使用這個配置設(shè)置來限制 Visual FoxPro 使用的內(nèi)存數(shù)量。如果必要,請使用 SYS (3050) 函數(shù)。
3.“作為圖標”插入對象
當我們將一個 OLE 對象插入到字段中時,將它作為一個圖標,而不要作為整個的對象。這樣可以減少所需的存儲空間,因為如果 Visual
FoxPro 同對象一起保存了一個“代表”映象,會占用大量的存儲空間。另外,如使用圖標,繪制該對象的性能也會提高,因為只需重畫圖標。
4.盡量使用人工鏈接和圖象控件
使用人工鏈接對象更快,因為自動鏈接需要的通知時間較長,而且人工鏈接不需要啟動 OLE
服務(wù)器來繪制對象。如果不需要經(jīng)常更新一個對象,請使用人工鏈接。
如果在一個應(yīng)用程序中使用單獨的位圖(如,公司徽標),則圖象控件要比 OLE 綁定型控件快得多。
5.使用 SYS(3050)
這個 SYS 函數(shù)允許我們優(yōu)化用于數(shù)據(jù)緩沖的前臺和后臺的內(nèi)存大小。前臺內(nèi)存是指當 Visual FoxPro
是前臺(活動)應(yīng)用程序時可用的內(nèi)存。后臺內(nèi)存是指當 Visual FoxPro 是后臺應(yīng)用程序時可用的內(nèi)存。
我們可以實際操作這些值,觀察 Visual FoxPro 為它的數(shù)據(jù)緩沖占用多少內(nèi)存,以優(yōu)化我們的應(yīng)用程序。


參考文獻:
①胡維華主編《Visual FoxPro程序設(shè)計教程》,浙江科學(xué)技術(shù)出版社,杭州,2000。
②陳華生主編《Visual FoxPro教程》,蘇州大學(xué)出版社


【如何提高Visual FoxPro的性能】相關(guān)文章:

Visual FoxPro6.0 中項目管理器08-06

Visual FoxPro自薦信08-16

《Visual FoxPro6.0數(shù)據(jù)庫教程》課程改革及評價方案05-23

Visual Basic中如何實現(xiàn)動態(tài)報表08-06

如何提高聽課效率08-15

如何提高公眾演講能力02-11

如何提高英語閱讀能力08-16

如何提高學(xué)生的閱讀能力08-18

如何提高學(xué)生的計算能力08-18