




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 如何提高Visual FoxPro的性能如何提高Visual FoxPro的性能 如何提高Visual FoxPro的性能 如何提高Visual FoxPro的性能 摘要:本文介绍一些实用技巧和技术。如果我们能正确地应用这些技术, 就可以大大改进Visual FoxPro的性能, 提高数据的访问速度。关键词:Visual FoxPro ;性能;技术高性能是 Microsoft FoxPro数据库管理系统(特别是它的数据库引擎)的最大特点。VisualFoxPro关系型数据库引进了对象模型, 提高了引擎的存取速度并增强了客户/服务器特性, 因此整个管理系统的功能变得更加强大。但是, 这些强大功
2、能的代价是使管理系统变得更加复杂。因此, 一方面, 很容易开发出性能稳定、面向对象、使用远程数据的应用程序, 另一方面, 也很难避免出现低性能的应用程序。本文从改善、提高Visual FoxPro性能的目标出发, 介绍一些实用技巧和技术。一、改善本地数据访问的性能1使用索引VisualFoxPro中的索引是基于树的数据结构, 因此查询经过索引的表是很快的。但当表中有较多的索引时, 更新表和向表中输入数据就会变得慢一些, 因为Visual FoxPro 需要更新每个索引。通常, 只需在用于筛选和联接的数据上建立索引。应该避免以 FOR <条件> 或 NOT <条件> 这样
3、的形式建立索引表达式, 因为这些表达式无法优化。例如:INDEX ON DELETED() TAG DEL是可以进行 Rushmore 优化的, 但是, INDEX ON NOT DELETED ()TAGNOTDEL则不能。在特殊情况下, 我们不想包含被删除的记录, 可以先设置 SET DELETED ON, 再创建索引, 这样可以加速操作。此外, 注意不要在那些只有少数离散数据中取值的字段(例如逻辑型字段)上建立索引。2优化查询的条件Visual FoxPro 通过查找与筛选表达式左边相匹配的索引表达式来优化筛选条件。我们经常试图将索引的标识名与一个筛选表达式相匹配, 而Visual Fo
4、xPro 无法通过这种方式优化查询。下面使用的索引是错误的:USE CUSTOMERSINDEX ON UPPER(cu_name) TAG nameSELECT * 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) 函数SYS(3051)S 函数控制从一个记录(表、索
5、引或备注文件)的锁定失败到再次尝试锁定它之间的时间间隔, 以毫秒为单位, 默认值为 333毫秒。如果在我们的系统中存在大量的锁定竞争, 可以将这个值调大(最大值为1000), 以提高我们应用程序的性能, 因为应用程序不会因徒劳锁定记录而浪费时间。但是, 如果锁定竞争不多, 应将该值调小(最小值为100), 以加速记录锁定的尝试。4注音标记和机器排序序列在 Visual FoxPro中, 已经改进了查询包含国际化字符(带有区分标记的字符)数据的优化方式。但如果我们的索引表达式的结果包含的字符都不带注音标记(例如 B 或M), 则查询还能更快。非机器排序序列(例如“通用”排序序列)比机器排序序列慢
6、, 有下列几个原因:非机器索引关键字的大小是机器索引关键字的两倍, 因为必须为每个字符记录注音信息;为了返回正确的结果, 非机器排序序列要使用很多特定的规则来断定索引的顺序。因为机器排序序列更快, 所以它通常用于联接和查找, 而其他排序序列用于排序记录。5使事务安排紧凑事务应该只包含更新数据操作, 在事务中包含其他任何操作(如使用我们界面, 使用编程结构的 CASE、WHILE 或 IF语句)都会降低更新数据的效率。这对于 Visual FoxPro是很重要的, 因为使用事务需要锁定记录。在事务中以及更新记录时会锁定记录, 并且在提交或回滚事务之前不会释放这些锁定的记录。即使我们使用了 RLO
7、CK() 或 FLOCK (), 然后执行 UNLOCK, 记录在 END TRANSACTION 或 ROLLBACK语句之前也一直保持锁定。另外, 在追加记录时需要 Visual FoxPro锁定标头(即其他我们可以修改, 但不能添加或删除), 并且在事务结束(提交或回滚)之前一直锁定标头。因此, 在一个高容量多我们的系统中, 减少锁定记录的时间就变得很关键。6使用新的数据类型在 Visual FoxPro中引入了四种新数据类型日期时间型、整型、双精度型和货币型。所有这些类型的数据都以二进制数据的形式保存在磁盘上(整型是四字节的二进制数据, 其他数据类型是八字节的二进制数据)。使用这些数据
8、类型有两个优点:首先, 由于在磁盘上保存数据时所占的空间更小(一个八位数的数据若用数值型保存将占用八个字节, 而保存为整形只需要四个字节), 这样, 从磁盘向内存加载数据和索引时, 一次可以加载更多的有用数据, 从而提高应用程序的性能。第二个优点是不需要任何的数据转换。VisualFoxPro 内部将整型数据表示为四字节的二进制值, 而数值型数据在磁盘上保存为 ASCII 码形式, 因此, 在每次读数据时, 都必须将 ASCII码转换为二进制值, 存盘时再转换回去。由于整型和双精度型数据(以及日期型和货币型数据)不需要这种转换, 所以数据访问就更快。在新数据类型中, 整型数据对速度的影响最大。
9、要尽量使用整型数据作为主关键字和外部关键字的值。这样可以得到更小的 DBF文件, 更小的索引, 更快的连接。二、提高远程数据访问的性能在任何后端数据库中检索数据是很费时的。为了加快数据的下载(或更新), 可使用下面的方法。1只下载需要的数据在一个应用程序的功能单元(比如, 表单或报表)中, 很少需要访问表中的所有数据。通过创建远程视图, 只得到(或更新)我们需要的字段和记录, 就可以减少通过网络的数据数量。例如, 在我们的表单上有四个控件, 分别绑定了远程视图的字段(客户标识号、公司名、联系人和来自客户表的地址), 可使用SELECTcustomer_id, company, contact,
10、 address FROM customers SELECT则会好得多。2使用一个 WHERE 子句为了进一步限制下载(或更新)的数据数量, 可以使用 WHERE 子句。对于上面的示例, 如果我们只需要西南部的客户记录, 我们视图的 SELECT语句可以是:SELECT customer_id, company, contact, address FROM customersWHERE region = NORTHWESTVisual FoxPro 提供的视图灵活性以及 SQL Pass Through 技术使我们可以在 SELECT、UPDATE 和DELETE 等 SQL 语句的 WHER
11、E 子句中使用参数。例如, 对于上例, 我们可以使用参数在运行时刻下载任何地区的信息:SELECT customer_id, company, contact, address FROM customersWHERE region = ?pcRegion式中, “pcRegion”是参数的名称。3使用正确的更新条件视图设计器中的“更新条件”选项卡允许我们指定视图中的数据如何被更新(插入和删除)。在选项卡中的“SQL WHERE子句包括”部分, 我们可以控制 UPDATE 和 DELETE 操作中 WHERE子句的内容。这对于在后端控制数据冲突是很关键的, 对于改善性能也是很重要的。因为我们向后
12、端更新的字段总是可更新字段的子集(并且一定是视图中字段总数的子集), 在大多数情况下都使用“关键字和已修改字段”选项。对于支持时间戳的服务器数据库, 建议使用“关键字和时间戳”设置, 这种更新方式比用“关键字和已修改字段”更快。4使用 BatchUpdateCount 属性有些服务器 (例如 Microsoft SQL ServerServer ) 允许我们在一个单独的数据包中发送一批 SQL语句, 这个技术加速更新、删除和插入, 因为通过网络传送的网络包的绝对数量减少了, 而且服务器数据库可以成批编译多个语句而不是单独编译。我们应该对于这个属性和 PacketSize属性用不同的值来试验,
13、以优化我们的更新。可以在“查询”菜单的“高级选项”对话框中设置该属性, 或者通过 DBSETPROP () 或CURSORSETPROP () 函数来设置。注意若要使用这个属性, 必须通过调用 DBSETPROP () 或 SQLSETPROP ()函数设置“Transactions”属性来启动人工事务。5使用 PacketSize 属性PacketSize属性控制向数据库服务器传送和下载的网络包的大小(按照字节)。它实际上是由 ODBC设置的, 并且可以是任何非零值。不同的网络对该属性有不同的处理, 因此我们应该参阅网络服务文档。该属性的默认值是 4096字节。如果我们的网络支持更大的数据包
14、, 我们可以在每次请求 (SELECT、INSERT、UPDATE、DELETE)时将该属性值增加以加大网络吞吐量。6使用 FetchMemo 属性FetchMemo属性控制当从后端取得一个记录时是否也取得备注和二进制(通用字段)数据。请将该属性设置为.F., 这样, 直到真正需要时, 才从网络传递数据,从而提高我们的查询取得数据的速度。7在本地机上保存查阅表在很多情况下, 我们的应用程序经常访问只读数据。例如, 我们的应用程序可能会经常使用一个包括各个公司人员的档案表, 将这些数据保存在本地机上(也就是, 不把这些表装在服务器上), 查询会更快。对于从不更改或很少更改的数据, 这个技术会很有
15、用。8使用本地规则几乎很少有人知道, Visual FoxPro在本地和远程视图中也支持字段级和记录级规则。这些规则是为了防止与数据或商业规则不符的数据进入数据库。可以将这些规则放在视图中, 而不仅仅放在后端表中, 这样作的好处是:在无效数据通过网络传送之前就可捕获它。缺点是:这些规则并不自动与后端服务器表上的规则相匹配。因此, 如果后端表规则更改了定义, 必须人工更改本地定义的视图中的规则。但是, 如果规则很简单, 这也不是一个很大的负担。另外, 规则定义并不经常改变, 因此我们也不必担心会经常更新本地的规则。三、改造表单对象性能1使用数据环境在“表单设计器”或“报表设计器”中使用数据环境,
16、 则打开表和在表间建立关系的速度会比在表单的 Load 事件中使用 USE、SET ORDER和 SET RELATION 命令快得多。这是因为 Visual FoxPro 使用底层的系统调用来打开表并建立索引和关系。2限制表单集中表单的数目只有在必须让一组表单共享一个私有数据工作期时才使用表单集。当我们运行一个表单集时, 即使只显示了表单集的第一个表单, Visual FoxPro也会创建表单集中所有表单和所有表单中的所有控件, 这样很费时间。如果表单不必共享一个私有数据工作期, 这样做是不必要的。我们应该建立独立的表单并在需要它们时执行DO FORM 命令。当然, 如果使用了表单集, 在访
17、问表单集中的表单时也会得到些好处。因为所有表单已被加载到内存中了, 只是没有显示, 所以显示表单会比较快。3向页框中动态加载页面控件与表单集类似, 当加载页框时, 也加载了每个页面上的所有控件, 从而降低了性能。我们可以创建页框中每个页面上控件的类来解决这个问题。使用这个技术, 由于直到访问时才加载页框中第二及其他页面上的控件, 所以可以加速表单的加载。4动态绑定控件与数据对于一个包含很多与数据绑定的控件的表单, 如果我们将绑定的时间延迟到需要的时候, 也可以极大地提高表单的性能。我们可以将表单使用的表和视图放在数据环境中, 这样当加载表单时表和视图就打开了。然后, 当一个控件(例如组合框)获
18、得焦点时, 我们可以将控件与数据值绑定。5使用 LockScreen属性任何对表单上控件的更改, 这个属性允许我们延迟屏幕刷新。例如, 使控件可见或不可见, 更改控件颜色, 或者在绑定型控件中移动记录, 都可以用这个属性将它们延迟到所有更改都结束时再刷新, 这样系统的效率会更高。6在视图中使用 NoDataOnLoad 属性视图的数据环境临时表对象的 NoDataOnLoad 属性与视图的 USE 命令的 NODATA子句的作用相同。它打开视图, 但是视图不取得任何数据。对于本地和远程视图都是如此。例如, 我们有一个有关客户信息的表单, 它使用一个包含客户信息的视图, 该视图使用参数代替cus
19、tomer_id 的具体值。我们可以输入一个有效的 customer_id, 然后按下“搜索”按钮。这样做的优点是表单的加载时间大大减少了, 因为视图不给我们带来任何数据, 但是与视图字段绑定的控件仍是绑定的, 因为存在一个打开的工作区(只是其中没有数据)。四、完善OLE 的性能在访问 OLE 数据之前先运行 OLE 服务程序。如果与通用字段数据类型相应的服务器(例如 Microsoft Excel 或Word)在客户机的计算机上已经运行了, 则与通用字段绑定的控件通常会获得更好的性能。1自动化的性能在某些情况下, 即使已经运行了一个实例, OLE 服务器(例如 MicrosoftExcel)仍然经常启动另一个新的实例。要想改变这种情况(并提高性能), 请使用 GetObject 函数而不要使用 CreateObject函数。例如, 下面的调用:x = GetObject
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国文化印刷用纸企业竞争优势与投资前景研究报告
- 钢结构设备吊装与安装方案
- 施工现场防盗与安全保障方案
- 2025年海洋能源开发利用工程建筑行业研究报告及未来行业发展趋势预测
- 2025年电压力锅行业研究报告及未来行业发展趋势预测
- 1例急性播散性脑脊髓炎患者的护理教学查房
- 2025年保温碟行业研究报告及未来行业发展趋势预测
- 2025年保暖披肩行业研究报告及未来行业发展趋势预测
- 三级老年人能力评估师试题+答案
- 放射科技术(师)《CT检查技术》知识考试题(附含答案)
- TGSC 006-2024 二氧化碳陆地封存工程选址指南
- 销售目标达成计划
- 食材验收标准培训课件
- 畜禽养殖知识讲座
- 康复治疗大厅规划方案
- 高速公路收费员培训课件
- 暴发性心肌炎的护理查房
- 生字预习表语文预习卡
- 大格子作文纸模板
- 房屋建筑构造课件(上)
- 团员组织关系转接介绍信(样表)
评论
0/150
提交评论