天天被操天天被操综合网,亚洲黄色一区二区三区性色,国产成人精品日本亚洲11,欧美zozo另类特级,www.黄片视频在线播放,啪啪网站永久免费看,特别一级a免费大片视频网站

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

如何提高Visual FoxPro的性能

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

如何提高Visual FoxPro的性能

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

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

一、改善本地數(shù)據訪問的性能
1.使用索引
Visual
FoxPro中的索引是基于樹的數(shù)據結構,因此查詢經過索引的表是很快的。但當表中有較多的索引時,更新表和向表中輸入數(shù)據就會變得慢一些,因為
Visual FoxPro 需要更新每個索引。通常,只需在用于篩選和聯(lián)接的數(shù)據上建立索引。
應該避免以 FOR <條件> 或 NOT <條件> 這樣的形式建立索引表達式,因為這些表達式無法優(yōu)化。例如:INDEX ON DELETED
() TAG DEL是可以進行 Rushmore 優(yōu)化的,但是,INDEX ON NOT DELETED ()TAG
NOTDEL則不能。在特殊情況下,我們不想包含被刪除的記錄,可以先設置 SET DELETED ON,再創(chuàng)建索引,這樣可以加速操作。
此外,注意不要在那些只有少數(shù)離散數(shù)據中取值的字段(例如邏輯型字段)上建立索引。
2.優(yōu)化查詢的條件
Visual FoxPro 通過查找與篩選表達式左邊相匹配的索引表達式來優(yōu)化篩選條件。我們經常試圖將索引的標識名與一個篩選表達式相匹配,而
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)中存在大量的鎖定競爭,可以將這個值調大(最大值為
1000),以提高我們應用程序的性能,因為應用程序不會因徒勞鎖定記錄而浪費時間。但是,如果鎖定競爭不多,應將該值調小(最小值為
100),以加速記錄鎖定的嘗試。
4.注音標記和機器排序序列
在 Visual FoxPro
中,已經改進了查詢包含國際化字符(帶有區(qū)分標記的字符)數(shù)據的優(yōu)化方式。但如果我們的索引表達式的結果包含的字符都不帶注音標記(例如 B 或
M),則查詢還能更快。

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

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

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

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

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

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

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

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

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

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

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

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


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


【如何提高Visual FoxPro的性能】相關文章:

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

Visual FoxPro自薦信08-16

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

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

如何提高聽課效率08-15

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

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

如何提高學生的閱讀能力08-18

如何提高學生的計算能力08-18