VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - VB5三十六计
发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:8913, 日期:2001-11-16
VB5三十六计
感觉篇

NO.1 瞒天过海
为了让用户感觉到应用程序 执行很快,我们可以利用定时器事 件在后台“悄悄”执行一些任务。在 一些连续性的操作(比如向导)中, 用户可能会因为浏览提示信息等缘故而不会立即对应用程序作出响应。这时我们可以用一个静态变量或全局变量来跟踪运行过程,一旦定时器空闲就进行一小部分工作(如加载数据)。如果能保证每次的工作量都很少,那么用户不会感到应用程序的应答有什么影响,相反他会发现后续工作将会完成得很快。
NO.2 趁火打劫
在应用程序中可能会多次从磁盘中提取数据,这时我们可以尽可能一次多加载数据,只要这些数据不是太大,用户就不会感到过多的延迟。但由于减少了磁盘操作的次数,用户会感到应用程序的总体速度较快。
NO.3 顺手牵羊
可以在Windows启动时先运行一个小的实用程序来预加载VB应用程序所需的动态链接库,如Msvbvm50.dll等。这样,由于windows动态链接库的唯一性,应用程序启动时就能跳过加载这些文件的步骤,使启动时间大大缩短.
NO.4 暗渡陈仓
当应用程序的主窗体包含较 多数据时,它的启动就会显得非常 慢。这时我们可以设计一个简洁的 窗体来显示诸如版权之类的信息,’ 而显示这个窗体的同时则在后台 用Load方法将主窗体调人内存, 之后将版权窗体卸载并用Show方 法显示主窗体,从而让用户误以为 主窗体一下子就调出来了。
NO.5 金蝉脱壳
在应用程序中一些窗体会反 复出现,这样我们在不需要时用 Hide方法隐藏而不是用UnLoad 卸出内存,这样做的优点是再用到 该窗体时可以立刻显示出来而不 是延迟一段时间、
NO.6 美人计
一个Windows应用程序的成 功在很大程度上取决于用户界面 的优劣,今年很流行的WinAmp就 是不很典型的例子。关于优化界面 的方法,有调整控件位置,保持无 素一致、简化界面等

速度篇

NO.7 调虎离山
当控件的某一属性需反复引 用时,我们可以把它缓存到某一变 量中以加快速度:
L=picture1.top
for I=0 to 15
image(I).top=L-1
next I
NO.8 釜底抽薪
由于Windows的图形特性,图 形及其它操作的显示速度在很大 程度上决定了应用程序的感觉速 度,因此在窗体互相重叠的时候应 尽量不使用ClipControls和Auto Redraw,设置控件属性时应隐藏控 件,以免多次重画,还有用Line代 替Pset等等。
NO.9 李代桃僵
尽管过程调用使代码具有模 块化风格而更易维护,但对于速度 要求严格的场合,过程调用会增加 额外的操作和处理时间,尤其是当 调用处于循环体内时,我们就有必 要变过程调用为代码内嵌,以牺牲 维护性的代价换取宝贵的速度。
NO.10 连环计
速度的优化不只是某一单方 面的事,比如折半查找的算法效率 就比顺序查找高。但要是循环体采 用Variant变量作计数器则会大大 降低执行速度,因此最佳的方案是 折半查找加Long整型变量作计数 器。
NO.11 上屋抽梯
在应用程序中可能会有一些 对象或变量已经完成任务却仍占 据内存资源,这里提倡一种上屋抽 梯、过河折桥的方法卸载对象或变 量:set Objest=Nothing
同样的,使用动态数组并在使 用完毕后回收内存资源也能达到 相同的效果。
NO.12 反客为主
由于VB采用事件驱动,因此 应用程序的操作总是靠用户或系 统的响应来激发的,但对于一些总 是要执行的操作我们可以主动产 生一些事件,以在应用程序空闲时 合理的利用系统资源。

大小篇

NO.13 偷梁换柱
有时候我们仅仅是为了显示图形和文字,但却使用了图片框和文本框,实际上图像框和标签在这种场合能很好地代替前二者,且大大节省内存。
NO.14 树上开花
这里讲的是一种借局布势的方法,即当我们需要很多相同的控件和窗体时可以使用控件数组和Forms集合。控件数组通过赋予多个同类控件相同的Name属性及相应的Index属性得到,而Forms集合则通过使用New关键字获得。二者的引用方法分别为Object(n)和Forms(n)。
NO.15 走为上
随着工程的日渐庞大,代码中难免会出现一些死代码和无用的变量及常数,VB在编译时会自动删除无用的常数,但死代码和无用的变量仍然会被编译到.exe文件中。这不但会占用宝贵的内存资源,而且会降低执行效率甚至导致应用程序的崩溃,因此把死代码和 无用变量请“走”是一个很好的习 惯。
NO.16 假痴不癫
虽然功能齐全是件令人称道 的事,但重复的建设和为了一些很 少用到的功能而耗费大量代码和 空间无疑是一种浪费,就好比 Win95的任务条上已有一个时钟, 你却非在应用程序中再加一个一 样没有多大意义,另一个例子就是 WPS97虽然没有Word功能多却 非常受欢迎。其实软件同硬件一 样:电脑,电脑,够用就好!
NO.17 假道伐虢
尽管我们可以自己编写代码 来完成诸如绘图。表格处理之类的 工作,但若这些功能在应用程序中 不占重要位置时,可以考虑通过 OLE或者DDE的方法调用画图、 写字板、Excel之类的现有程序来 完成工作,既节省代码又节省空 间。
NO.18 无中生有
VB5提供了一种新的编程模 式,即利用多个工程同时工作,这 样我们可以将应用程序分段,虽然 内存里没有多少代码,但需要某项 功能时可以将这个ActiveX控件 随时调人内存使用。 合理地利用系统资源。

数据篇

NO.19 隔岸观火
在进行数据库操作时往往涉 及到数据的检索,可以用Find- First、FindNext及Seek等方法来完 成任务,但最简单也是最有效的方 法,是给足查询条件并用类似英语 的结构化查询语言SQL来完成这 个工作,SQL由Microsoft Jet支 持,其语法和ANSI SQL基本一 致:
SELECT字段名FROM表名 WHERE条件
其中“字段名”可包括多项值, “条件”项则可使用“And”、“Or”、“<”、“=”、“Like”等逻辑
比较操作符。一旦按照语法编写了SQL语句,即可将其提交给 Data控件的Recordset对象,并由Jet引擎处理,
从而返回查询结果,以轻松实现组合查询。
NO.20 空城计
随着NC、NetPC及低价PC的 日益流行,网络中的客户机配置可 能会越来越简单,因此把大量的数 据库及其操作放在客户机上是不 太合适的,可以把控件同远程服务 器上的数据库进行绑定。这样,虽 然客户机上只存在一丁点儿数据, 但用户需要的任何数据库功能都 可通过服务器实现,并且由于数据 存放集中而更加容易管理。
NO.21 声东击西
在设计关系数据库软件并希 望两个数据库表关联时,可以采用 VB提供的DBListBox和DBCom boBox控件,利用它们能使两个表 协调变更。当然,两个表必须有一 个类型相同的字段以确定其关 系。这两个控件均具有以下五个特 殊属性:
DataSource 被绑定的Data 控件名称。
DataField 由DataSource属 性指定的记录集的字段名称,它用 来决定列表中什么元素被突出显 示。当作了新选择后,移动到一条 新记录时该字段被更新。
RowSource将用于填充列表 的Data控件的名称。
Boundcolumn由RowSource 属性指定的记录集中的字段名称, 它必须与用来更新列表的 DataField字段类型相同。
ListField 用来填充列表的 由RowSource指定的记录集中的 字段名。
通过设置以上五个属性,我们 可以轻松实现主副关系数据库应 用程序的构造,当然我们也可以不 用这两个控件而用代码来实现,其 事例可以通过使用数据窗体向导 而得到。
NO.22 借尸还魂
也许用户会希望应用程序有 Undo功能,“事务”正是实现恢复 数据库更改的工具,VB5通过以下 三个方法支持事务功能: BeginTrans 开始一个新事务 CommitTrans 确认所作的更改 Rollbac 撤消所作的更改
事务功能可以嵌套,典型的例 子如下:
Dim Tablel As Recordset
‘定义表变量
Dim work1 As Workspace
‘定义工作空间
Dim Work2 As Workspace
Set Tablel =Datap.Recordset
Set Work1=workspace(0)
Set Work2 = Workspace(1)
Work1.BeginTrans
……注释:一系列改变
Work2.BeginTrans 注释:撤消变更
…… 注释:一系列改变
Work1.CommitTrans 确认变更
NO.23 远交近攻
设计基于SQL Server的窗体 时应考虑到网络的带宽:应用程序 向服务器申请的数据越多网络就 越易塞车,因此,设计窗体时应在 用户有明确要求或确实需要时才 向服务器申请数据和功能:
①用过滤器或SQL查询限制 记录集记录数。
②只在服务器上查询窗体实 际用到的字段。
③尽量少使用绑定控件,因为 它们会独立向服务器递交查询。
④对始终不变的数据应尽量 保存在本地注释:Jet数据库以加速查 询。
⑤对于很难改变的数据,在服 务器和本地机上同时保存,仅在其 改变时才下载。
NO.24 围魏救赵
有些memo字段和长二进制 格式(OLE对象)字段并不常用, 可以在用户要求显示时才把它调 人内存,这样可以大大降低内存负 担。

调试篇

NO.25 擒贼擒王
调试包含除错和优化,而优化 必须找准方向。比如速度对游戏至 关重要,而Internet下载型软件则 着重大小,所以找准方向,找对地 方往往能事半功倍。优化速度应尽 量优化循环体,因为循环体的执行 速度差会成倍影响应用程序,同 理,对于经常调用的过程和函数也 是如此。
NO.26 欲擒故纵
测试应用程序和处理等价于 VB运行错误的具体条件时,进行 错误模拟是非常有用的。模拟错误 的格式为:
Object.Raise argumentlist
例如下面的语句模拟“磁盘未 准备好”的错误:
Err.Raise Number:71
NO.27 以逸待劳
无论我们写的程序有多么优 秀,实际运行中的错误我们仍然无 法预料。设置错误捕捉是个以逸代 劳的做法。一旦错误被捕获,我们 就可以调用例程进行处理:
sub A()
on Error Goto CheckErr
……
Exit Sub
CheckErr:
……
Endsub
NO.28 关门捉贼
当应用程序变得庞大后,仅对 整个工程进行表面测试难以保证 可靠性。因此,对于一些可能会出 错的过程和函数应单独测试,满足 其调用条件井检查返回结果,这对 于发现错误尤其是非运行错误和 非语法错误(如计算错误)大有帮 助。
NO.29 借刀杀人
对一个频繁使用的变量或对 象逐步跟踪无疑是个庞大的工程, 好在VB5提供了监视表达式,利 用它可随时监视变量或对象,并在 满足指定条件时中断运行。通过 “调试”菜单中的“添加监视表达 式”可获得这一功能。
NO.30 打草惊蛇
为避免变量重名我们会使用 一些长变量名,但这样很容易造成 变量名拼写错误。这时我们可以在 “选项”对话框中确认“要求变量声 明”.如此VB就会自动在其后的 每个模块中添加“Option Explicit”, 从而在运行程序时, VB一旦发现 拼写错的变量名,而错的名字又未 定义时,就会告诉你“变量没有定 义”,并把光标停在该处。当然,这 样做要注意两点:一是最好一开始 时就选择“要求变量声明”,二是用 到的变量都必须先声明(当然,这 是个好习惯)。

杂谈篇

NO.31 混水摸鱼
坐井观天往往不会有什么好 成就,要跟上10倍速时代必须时 刻注视新技术。网上有很多Ac tiveX控件,融合了很多流行技术, 可以去“摸”几个,至于地址可在 《电脑爱好者》上找到一些。
NO.32 抛砖引玉
对于VB FAN,要想“烧”出水 平必须和别人相互交流,往往你解 决不了的难题恰好是别人的拿手 菜,而你自以为的高招却不如别人 的优秀……
NO.33 反间计
将彼之技用于我技,看看别人 的程序是怎样写的,特别是VB的 范例,相当一部分“贼棒”。
NO.34 揩桑骂槐
有时想让用户注意某处而用 户偏偏视而不见,可以用高亮、鲜 艳的色彩甚至声音来提醒他们: “注意了,这里有问题!”
NO.35 笑里藏刀
友好的提示总是更能博得喜 爱,用户并不需知道那些晦涩的技 术细节,他们只需要知道发生了什 么事情,该怎么办。像“C盘 xxxx扇区严重损坏,重试?放 弃?失败?”就比“存储数据时C盘 出错,改存到其它驱动器吗?”要令 人讨厌。
NO.36 苦肉计
计计归来,计计汇总,想要提 高VB5应用水平,勤学苦练必不 可少,因此说,“VB5三十六计,勤 奋是上策”。