- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
 |
<FONT color=#fed969 size=4>( q' Z# p0 ]5 x
< ><FONT color=#f70909>作者;小珂 转自<a href="http://www.hackbase.com/" target="_blank" >黑基</A>bbs<a href="http://hackbase.com/News/hk" target="_blank" >原创</A>作品版4 A% i7 d8 o" ^( t! n
版权归<a href="http://hackbase.com/hacker" target="_blank" >黑客</A>基地所有, 转载请注明出处</FONT></P>
+ I- l: l/ t0 Y/ {7 y" M< >前一日子写了篇替VB喊冤,感到说理没有力度,泛泛空谈,远没有起到喊冤的效果-_-5 U* e+ f1 ~3 ^8 N+ {2 ~
所以呢,现在把我以前的VB<a href="http://hackbase.com/hacker" target="_blank" >代码</A>优化的一点小小的<a href="http://hackbase.com/game/jy" target="_blank" >经验</A>总结一下,希望可以给大家带来点帮助,也希望大家能9 W9 `. K7 D/ }; a
把各自的观点补充一下~~
O2 L8 n4 \, H9 u3 L1 D第一,偶认为要写出运行速度快的程序,在定义数据类型上要注意一下,
@) L* Y1 m2 d比如说Single,Double和Currency这几种数据类型如果可以的话应尽量用Integer或Long 代替,说到这,有位仁兄举手发言了:“那偶要是想数据能够保存小数,怎么能用那2个整型呢?”,别急啊,我下面就想说这个,其实小数也可以保存在Integer类型的变量中。
# y+ ~1 s) W" p2 I例如程序中约定有三位小数,那么只需要将保存在Integer变量中的数值除以1000就可以得到结果。
/ Q2 P c) S, I& R7 I# u/ G根据<a href="http://hackbase.com/game/jy" target="_blank" >经验</A>,使用Integer和Long替代Single,Double和Currency后,<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的运行速度可以提高将近10倍。3 U- u* M! F# |' p. E1 b
这个可不是吹牛啊~~,不信你也试试?</P>2 C+ c1 F( g, r9 y {' b
< >第二,要尽量避免使用变体,这个稍微懂点<a href="http://hackbase.com/hacker/program" target="_blank" >编程</A>的估计都能理解,! J6 V8 o+ M0 F" ^9 W. ]
变体类型的变量需要16个字节的空间来保存数据
& s. x, W9 M9 J b J9 E如果想写出效率高,质量好的程序,就不要偷懒哦~~</P>
& i9 i# V& z) z; C# L V5 b/ P< >第三, 尽量使用数组,避免使用集合,! Q# L: y w( j1 n b
能用数组的就不要考虑集合,为什么?
" f) B" S5 d! F$ t5 M/ @在VB中,数组是最高效的数据结构之一。
' A) Z0 u* s& Q/ E9 l自己想想,集合作为一个对象,, K. Q. y# s* s7 v6 ~0 ~4 N
其数据的存取速度可能只是数组的百分之一哦% ~, P8 Z! M9 G# R8 U9 [5 ^# r
,所以说能用数组的千万不要自己去找麻烦~~# b P4 E0 d+ ?- |6 e
当你有多个保存类似数据的变量时,也可以考虑将他们用一个数组代替。. j5 p$ W, Y3 S
另外记着不要使用循环来在数组间进行拷贝工作,
/ s" y, g9 U6 K3 M, h5 e请使用更快的API函数:MemCopy或者RtlMoveMemory</P>
, k, [0 g4 O0 V! V$ i< >第四,尽量 不要使用ActiveX控件
0 X% G. ^3 R; W5 |) A3 s, I除非ActiveX控件涉及到用户界面,否则尽量使用轻量的对象,6 t! m: w$ v! Q; J' V' {
例如类。这两者之间的效率有很大差异。) p" E3 }1 o7 m' _# N2 T) i ?3 ^
如果你设计的ActiveX对象不涉及到用户界面,就使用ActiveX DLL代替控件
9 j6 H) c+ y4 X在涉及到使用ActiveX控件和DLL的时候,很多程序员喜欢将它们编译好,! q7 i" E8 z; t8 L* Q
然后再加入工程中。我建议你最好不要这样做,- {, v c1 {( {! ]4 o
因为从VB连接到一个外部对象需要耗费大量的CPU处理能力。( Y9 r2 d4 K& k3 q
每当你调用方法或存取属性的时候,都会浪费大量的系统资源。! F2 x/ w5 M6 S+ ]2 [' _+ n5 \
如果你有ActiveX控件或DLL的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>,将它们作为工程的私有对象。</P>
0 n0 T F7 w# @6 F$ E5 f5 I8 @< >第五,减少模块的数量 L' H6 O4 |2 w0 ^+ Q
有些人喜欢将通用的函数保存在模块中,对于这一点我表示赞同。' [/ ?+ `/ N- ?# c# Y3 M! o1 {9 E
但是在一个模块中只写上二三十行<a href="http://hackbase.com/hacker" target="_blank" >代码</A>就有些可笑了。" |& i5 {3 t( y
如果你不是非常需要模块,尽量不要使用它。这% W4 R" \! N+ M V3 u) L
样做的原因是因为只有在模块中的函数或变量被调用时,1 _3 J6 e! ^% G0 |; p
VB才将模块加载到内存中;当VB应用程序退出时,
6 P. ]2 a; ]/ L) P* E才会从内存中卸载这些模块。如果<a href="http://hackbase.com/hacker" target="_blank" >代码</A>中只有一个模块,) o% G( V+ C3 ~& q; L4 a8 r
VB就只会进行一次加载操作,这样<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的效率就得到了提高;: }* U# o' q% A, j
反之如果<a href="http://hackbase.com/hacker" target="_blank" >代码</A>中有多个模块,VB会进行多次加载操作,<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的效率会降低。</P>
# s3 Q _3 \3 \, P2 T# |* P< >第六,减少图片的使用
9 T( I1 Q5 x+ `( D H+ L图片将占用大量内存,而且处理图片也需要占用很多CPU资源。4 }3 [: @: P Q. `/ U. B
在<a href="http://down.hackbase.com/" target="_blank" >软件</A>中,如果可能的话,$ V Y n3 z. |7 Z
可以考虑用背景色来替代图片,这个我常用,呵呵~~</P>
* u H0 F7 \* y: l2 \< >第七,其他的一些小<a href="http://hackbase.com/network/network" target="_blank" >技巧</A>
( P3 n, a% O) A* [7 Q1,判断字符串是否为空8 z9 r% i1 T }3 B6 g' m
检查字符串是否为空时一般使用这种方法
7 p5 q4 \# L% c' k, QIf Text1.Text = "" then
* a8 z* k' ]2 t+ \2 u o6 i0 t- pend if
0 @6 C4 f! O& ^1 T7 R, p( G如果使用
( o; w& O9 k& ]If Len(Text1.Text) = 0 then
3 z# C. B# b4 c3 \ }9 Iend if G( h2 H$ T2 y8 ]
效率会大大提高: V5 F0 I/ ^9 [% \
2,多使用With语句引用对象 \- G. I4 K+ j: A: Q6 F# Y
3,单独定义和分配对象
6 t! X+ U: ]; h定义对象和分配数值可以使用联合语句:Dim obj As New MyClass。但是这要比以下2个单独的语句运行速度慢:
; h: L! H) D5 ?9 NDim obj As MyClass
. j, L) K! z0 |/ hSet obj = New MyClass
. W9 M ~+ F& C4,使用Move方法
7 W: k- S7 T7 q4 J. B在改变对象的位置时,有些程序员喜欢使用Width,Height,Top和Left属性,如果使用Move方法代替,效率会提高很多- U; S7 x8 q- s
比如
: g, B% p( W% L: r# HImage1.Width = 100
* Z, s" f/ w! i' ~# o' K& ?Image1.Height = 100/ X* }$ A5 ?7 }2 A
Image1.Top = 0
; q3 v I0 h9 v: `7 dImage1.Left = 0
4 w' G, O ~5 M# r( P" ~就可以使用Image1.Move 0,0,100,100 代替</P>9 {2 ^) o, H: o C+ l* j
< >第八,算法优化1 Z' v4 |) Q, ?5 W4 Y2 j" E
尽可能不要使用平方根运算
& s( t1 F! i p3 d/ Z实践证明,使用平方根运算将耗费很多的运行时间。* E* X5 k3 n) e' p# Q
比如:宁可使用语句If a * a + b * b = 4 Then ...,
4 V( A; b- Z5 S8 s% U- M6 L' i而不要使用达到同等目的的命令If Sqr(a * a + b * b) = 2 Then ...。</P>$ C, L ?6 ?' X' p
< >写了一夜了,也就是把自己以前的一点<a href="http://hackbase.com/game/jy" target="_blank" >经验</A>总结一下,当然还有许多方法一时也想不起来了
* o# E; y$ \4 ~+ ?$ U2 N我会在想到过找到这方面的信息时再继续哦,希望大家也能把自己的相关<a href="http://hackbase.com/game/jy" target="_blank" >经验</A>补充一下
l* w% b8 h" d2 o另外我写的如果有原则性错误也欢迎大家批评指正,这里先谢谢了~~
8 d$ i! |/ b: k8 s" I我去睡觉了。。。-_-</P></FONT> |
zan
|