你的位置:创意公社- ideaer >> >> 程序开发 >> 详细内容 在线投稿

VB编程基础教程21–优化

排行榜 打印 发给朋友 举报 发布者:mn2357
热度495票  浏览111次 【共0条评论】【我要评论 时间:2010年9月30日 04:19
创意公社- ideaer2iD"K3\Lk

优化具有科学和艺术两重含义。从科学角度看,优化意指具体的优化技术;而从艺术角度看,优化指的是确定在什么地方、什么时候需要优化。由此,优化可定义为“通过选择和设计数据结构、算法以及指令序列,来提高程序效率(更小、更快)的过程”。
AW9G.F7lKu3t1有关优化的一个普遍存在的误解是,认为只是在应用程序开发周期的最后阶段才进行优化。而实际上,为了创建真正优化的应用程序,就必须在开发时实行优化。一般来说,优化的过程为:仔细选择算法,并在速度、大小等诸多限制因素间进行权衡,初步估计应用程序各个部分的速度和大小,再在以后的开发过程中检验上述假设。
%Oa.sO2?,A#A1优化的第一步是确定优化目标。优化可以从以下几个方面进行: 创意公社- ideaerz6z$O8L5YpC6],{T
真实速度(应用程序实际计算或操作的速度)。
T&~aY4R1
~i^)L Js1显示速度(应用程序屏幕显示的速度)。
s q:?b3W'xc1创意公社- ideaer t;inn o9M
感觉速度(应用程序运行时给人的感觉速度,它往往和显示速度有关,但并不总是和真实速度相关)。
(?Pyjf9s$z)S1
a2D%^B,LM3M1占用内存的大小。
#Q[&@\1c3F s p1创意公社- ideaera?"qG` n+H_
图形大小(这直接影响占用内存的大小,而且工作在 microsoft windows 中时往往会产生其它影响)。
t"_7s6pA#pK1一般来说,不可能在几个方面同时得到优化。一个经过大小优化的应用程序往往会降低其速度;相应的,经过速度优化的应用程序则会增加其大小。由此可见,实现不同目标的优化技术往往是相抵触的。
,Q/Y"UfC$Y7G"c n1值得注意的是,优化并不总是完全有益的。加快或降低应用程序的速度,可能导致维护或调试方面的困难;还有些优化技术与结构化的程序设计相矛盾,这在将来扩充应用程序的功能或把它嵌入其它程序时会产生麻烦。
I OzT\LN@L1在确定应用程序优化策略时,有三方面的问题值得考虑:优化什么、在何处优化及何时结束优化。创意公社- ideaer'Rp&n fJ,M$E&L2P
优化什么:理解实际问题
P:D}sT5r9T&W1如果没有明确的优化目标,就会因为方向错误而浪费大量的时间。优化的目标是为了满足用户的需求。例如,速度对于计算销售税的应用程序来说就至关重要,而对于可以从 internet 上下载的应用程序,则其大小倍受关注。所以,正确理解优化所要解决的问题所在,是确定优化策略的关键。
(m*m(])M)d+i [g:v1即使已经确定了某一优化目标,仍需在开发过程中全面考虑优化。在编写代码时,一步一步地浏览代码,仔细思考其实际发生的情况,则会帮助了解很多东西。例如,设置属性会产生许多事件,而恰好这些事件过程中有大量的代码,则无谓的设置属性语句会导致程序执行时的巨大延迟。有时优化即便是针对大小的,仍然可以在不增加大小的前提下实现速度的优化。
8gy!}7^D4E k1在何处优化:事半功倍
3j m|"H+AG'{$l L1绝大部分的开发者不可能对应用程序的所有地方都进行优化。增加时间等于增加开发成本,所以有必要进行“优化预算”。哪些地方能够花一些时间换取最大的投资回报呢?显然,那些速度慢、代码冗长的地方最需要优化,把精力花在这样的地方就会有事半功倍的效果。创意公社- ideaer b7A d6L Y`6~u
例如,速度是主要目标,则循环体往往是开始优化的好地方。一旦循环体内的操作得到加快,则该优化会被放大,倍数是循环体执行的次数。对于有大量重复的循环,减少循环体内的一个字符串操作,结果就会有很大的不同。同样的规律也可以应用于经常调用的子程序。创意公社- ideaerskW)y+Qa(}
何时结束优化:效果的衡量创意公社- ideaer"s5bg0z^'x
有时一些东西并不值得优化。例如,为了十几个项目的排序而编写一个精致的快速排序程序是没有意义的。一种排序的方法是把项目加到排序列表框中,再把它们按排好的顺序读出来。如果项目的数量巨大,则该方法效率极低;但对于少量的项目,该方法与其它方法的效率一样,而且代码出奇地简单(只是有点难解)。
T2Os#V'u&j7T/go1在一些情况下,优化纯属浪费。如果应用程序的运行受到驱动器或网络速度的限制,则对代码的任何优化都无助于速度的提高。此时,就应设法减少因延迟而造成对用户的影响:如利用进度栏提示当前应用程序的运行状况,或利用高速缓存减小延迟,或放弃控制,这样用户在等待时可以运行其它的应用程序,等等。
6}8N |(K*R5C'S1详细信息 请参阅“响应鼠标和键盘事件”中的“中断后台处理”
rX K/U'b;{1]"w2B1
UMGG}X1创意公社- ideaer:JM!@f k k5~ }

A t$Oi4j'e,U9^}o1优化代码
Rv\#u6lg|~1除非应用程序是用来产生分形图形的,否则应用程序看上去并不受限于代码的实际处理速度。其它典型的因素,如显示速度、网络延迟或磁盘操作,才是应用程序速度的限制因素。比如,导致窗体加载慢的原因,是窗体上控件和图形的个数太多,而不是由于 form_load 事件中的代码太慢。尽管如此,代码本身的速度也可以成为限制应用程序速度的瓶颈,特别是经常调用到的例程。这种情况下,可采用以下的几种技术来优化应用程序的真实速度。
R0En sW&Lsc1避免使用 variant 变量。创意公社- ideaer1I|?{D1d r3V

+d'x(s$ff/]:]o:z1使用 long integer 变量和整数运算。创意公社- ideaerkd TVj d2]PKP3b

w9G A(pE0~ qIPOIu1将常用的属性缓存在变量中。
F*V&H.SQv-[]1创意公社- ideaereV.K ch"x+\*A3P&d y
使用内嵌过程替代过程调用。创意公社- ideaer C5Y&A2y-b,D
创意公社- ideaerX A1bN'g
尽可能使用常数。创意公社- ideaerr\.[v/SI$f[&r e

rgi,w~(Jw1用 byval 传递参数,而不用 byref。
pTI] zy(D1创意公社- ideaer#XOsW9H0b)g.{4M
使用类型确定的可选参数。创意公社- ideaer"A,k/{ W6]:k S#b

9Qs.tJ4Z^1利用集合的优点。 创意公社- ideaer7h V t[*LG P9O$o*?"I$V
即使您并不想优化代码的速度,这也有助于了解这些技术及其基本原则。而且,一旦养成选择高效率算法作为代码的习惯,就可以从总体上大大改善应用程序的速度。创意公社- ideaerQm+@7d:w:x$r0o1y]
避免使用 variant 变量
(k\zLr#L`6k1variant 变量是 visual basic 中的缺省变量。这对于初学者以及处理速度不成问题的应用程序来说,是非常方便的。然而,如果想优化应用程序的实际速度,就要避免使用 variant 变量。因为,运行时 variant 将转化为其它适当的数据类型,那么直接采用其它简单的数据类型,就会避免不必要的操作而加快应用程序的速度。创意公社- ideaerCq"g;Vvp%R~0k3?
避免使用 variant 变量的一种好办法是使用 option explicit 语句,此时所有的变量都必须声明。要使用“option explicit”,就要在“工具”菜单中启动“选项”对话框,选择“编辑器”选项卡,选定“要求变量声明”复选框。创意公社- ideaeraV g8p(^zP,Al
在声明多个变量时要小心:如果没有用 as type 子句,它们实际上被声明为 variant 变量。在下面的例子中,x 和 y 是 variant 变量:
a0u;{c5N1dim x, y, z as long
6^!g)`"R e6P J1重写上面的语句,则三个变量为 long 变量:
+rEqN%@#lx v1dim x as long, y as long, z as long
#F!B0e#w#sj$g%B1详细信息 关于 visual basic 数据类型的详细信息,请参阅“编程基础”中的“数据类型”。
'C7a V}&up`:g2p1使用 long 整型变量和整数运算
$G.Va:n j tk1算术运算中要避免使用 currency、single 和 double 变量;并尽量使用 long 整型变量,尤其在循环体中。因为 long 整数是 32 位 cpu 的本机数据类型,所以其操作非常快;如果无法使用 long 变量,就要尽量使用 integer 或 byte 数据类型。很多时候,即使在要求使用浮点数的情况下,也可以使用 long 整数。例如,在窗体和图形控件的 scalemode 属性设置为缇或象素时,就可以在控件和图形方法中使用 long 整型变量表示大小和位置。
x"`!}'hzE L,p(g:}1进行除法运算时,如果不需要小数部分,就可以使用整数除法运算符 (/)。由于浮点运算需要转移到协处理器上进行,而整数运算并不需要,所以整数运算总是比浮点运算快。如果确实需要做小数运算,则 double 数据类型比 currency 数据类型快。
*T [|1{NFK1下表把各种数值数据类型按运算速度顺序列出。
-Y&J{Pk'] M ?1数值数据类型 速度
0P mO*i9S? O1long 最快 创意公社- ideaer-L^jc VK{
integer .
jnV xjm7Ijj1byte .
Mk;oNK0Wun1single .
-bl_Cfi;ND0qnQ1double .
E&f!~^8aV1currency 最慢
M)|X?)O `!TA[DF6H1创意公社- ideaerx:G'S#Sn#f3q0{m
将常用的属性缓存在变量中
zchX F5n+y1变量的访问和设置速度比属性快。如果经常用到某一属性的值(如在循环体中),可以在循环体外把该属性值赋给某一变量,以后用该变量替代该属性,这样就能够提高代码的速度。一般来说,变量的处理速度比同类型的属性处理速度快 10 到 20 倍。创意公社- ideaerT!?:S.sW[ ]\V
除非知道属性已经改变,否则在过程中就无需再次读取该属性值。可以把属性值赋予某一变量,然后在以后的代码中使用该变量。例如,象这样的代码就非常慢:
hkLBs:k1for i = 0 to 10
)@!k+uy%MMt1   picicon(i).left = picpallete.left创意公社- ideaer"Z$Z5sl$L t.Ly*H4t9h)V*|'n
next i创意公社- ideaer0Hp;g_:O`!|#Z wI,l
下面改写的代码就要快得多:
a6PgD X1~W+t5L1picleft = picpallete.left创意公社- ideaeri(}M^.gt/\?1cz
for i = 0 to 10
\7S9\$q;A0R%t+q LEG:^1      picicon(i).left = picleft
$h:Z1Mnyl1next i创意公社- ideaer8d,_2dC:uB
同样地,像这样的代码 . . .创意公社- ideaer|+w(l0}/f[
do until eof(f)
_+zCdFo)@1I!u@1   line input #f, nextline
D u;Wc m;j jq-\_1   text1.text = text1.text + nextline
Y,Z#bO m,@*~n8P$_1loop创意公社- ideaerc;g pj w8jU\P9V,}F
. . . 比下面的代码慢得多:
Vx)b;Bm1do until eof(f)创意公社- ideaerA&O-}Y+^ A({3|e.L~
   line input #f, nextline创意公社- ideaer,[y0j,EPEe0C
   buffervar = buffervar + nextline
7oMi7{Rz1loop
x"~4c-bD&K1text1.text = buffervar创意公社- ideaer[a_ RE*O v0Iyj
然而,下面的代码完成了相同的功能,而且还要快:
bP-s%e$T+r{B&oFbv1   text1.text = input(f, lof(f))
r9D'Hdw(@+yvOH n z5S1如上述,几种方法都实现了同样的任务;同时,最好的算法也是最优的。
)HU$Z9^4LO(m Q)g1同样的技术可用于处理函数的返回值。缓存函数的返回值,避免经常调用运行时的动态链接库 (dll),msvbvm60.dll。创意公社- ideaer~ b+C N,u8L~6U
使用内嵌过程替代过程调用
2Q$L/XHpO+}1采用过程调用使代码更具有模块化的风格,但模块调用总是增加额外的操作和处理时间。如果循环体中多次调用某一过程,就可以直接把该过程写到循环体中去,以消除过程调用时的额外负担。但另一方面,直接把某一过程写到好几个循环体中时,重复的代码无疑要增加应用程序的大小;同时,在更改程序时,有可能忘记更改这些重复的代码,这就增加了出错的机会。
;Z @~ |g)b#A1尽可能使用常数
)SE Q'f-s1使用常数可以加快应用程序的运行,增强代码的可读性,而且易于维护。如果代码中的字符串或数字是不变的,则可把它们声明为常数。常数在编译时只处理一次,将适当的值写进代码;而变量在每次运行应用程序时都要读取当前值。
pX.X6F$e?x9Xn1尽量使用对象浏览器中列举的内部常数,而不要自己去创建。不要担心应用程序中引用的模块包含多余的常数;多余的常数在形成 .exe 文件时被删除。创意公社- ideaer^5c\k2@
用 byval 传递参数,而不用 byref
b't!z@%bB#p3|n1编写含参数的 sub 或 function 过程时,按值 (byval) 传递参数比按地址 (byref) 快。尽管 visual basic 中参数传递的缺省方式是按地址的 (byref) ,但实际上需要改变参数值的过程极少。如果过程中不需改变参数的值,就可以按值 (byval) 来传递,举例说明如下:创意公社- ideaer~ V5?hr p`;N t
private sub dosomething(byval strname as string, _
&JJF|2yw1byval intage as integer)创意公社- ideaerS a7G/q5pEW7r
使用类型确定的可选参数
f/^+``Rh0[3E1使用 visual basic 5.0 中类型确定的可选参数,可以提高 sub 或 function 的调用速度。visual basic 以前版本中的可选参数只能是 variant 的。如果过程是按值传递参数的,正如下面的例子,16 个字节的 variant 变量保存在堆栈中。
#Yn6WU"[$m A|U1private sub dosomething(byval strname as string, _
m/a/G w0?1optional byval vntage as variant, _创意公社- ideaer2D0GaX isO
optional byval vntweight as variant)创意公社- ideaer"yUR*g ?:u9r7o
使用类型确定的可选参数,每次调用时占用的堆栈空间较少,而且传递到内存中的数据也较少:创意公社- ideaer hE(G0vO3? Xp E
private sub dosomething(byval strname as string, _
e$GF1q:Y5B1optional byval intage as integer, _创意公社- ideaer S E.^ W;J
optional byval intweight as integer)
pQ![!sV {,p%}1类型确定的可选参数的访问速度比 variant 快,而且一旦数据类型错误,编译时就显示错误信息。
,vj,V(V7s1利用集合的优点
p"fUC5?@1可以定义和使用对象的集合是 visual basic 的强大功能之一。尽管集合是非常有用的,但还要正确使用才能获得最好的效果:
FRI'b|F \1使用 for each…next 替代 for…next。创意公社- ideaer5}7r \8M/m&u$s)l
创意公社- ideaery3t8K_(yV:wHU
添加集合的对象时避免使用 before 和 after 参数。
cKKF'w7I1创意公社- ideaer$H2Lg9x,Z sk2^x
使用键集而不用几组相同对象的数组。 创意公社- ideaer(J'OSB?i
集合可以用 for…next 循环进行迭代。但采用 for each…next 可读性更好,而且多数情况下更快。for each…next 是由集合的生成器实现迭代的,所以实际的操作速度将随集合对象的不同而改变。由于 for each…next 的最简单的实现机理就是 for…next 的线性迭代,因此 for each…next 不会比 for…next 慢。但是,有些情况下采用了比线性迭代更复杂的实现机理,所以 for each…next 要快得多。创意公社- ideaer%EhSr5P MU'I
如果没有使用 before 和 after 参数,则往集合中添加对象是非常快的。否则,visual basic 必须在集合中检测到其它对象后,才能添加新对象。
yhx*kgq1如果对象的类型都一样,集合或数组都可以用来管理这些对象(如果对象的类型不一样,则只能用集合)。从速度的观点看,选择何种方式取决于对象的访问方式。如果能够为每一对象分配唯一的键,则集合是访问对象的最快方式。使用键从集合中检索对象比从数组中顺序遍历对象快。当然,如果没有键而要遍历对象时,则选择数组比较好。就顺序遍历方式而言,数组比集合快。创意公社- ideaervb [.m?s a
如果对象的个数少,则数组使用的内存小,并且搜索的速度快。当对象的个数在 100 左右时,集合比数组的效率高;当然,具体的数目还有赖于微处理器的速度和可用的内存。创意公社- ideaerDoZI$s r
详细信息   请参阅“再论编程”中的“用集合替代数组”。
V"l0g WwE3N*Gp1优化显示速度创意公社- ideaer(@"t(lhgdX B,ckD_ p

^OsS3X+v8c W1
eU+q,~h.x1
jXh|"I K*K1由于 microsoft windows 的图形特性,图形和其它操作的显示速度在很大程度上决定了应用程序的感觉速度。窗体出现及画图的速度越快,应用程序就会显得越快。以下的几种技术可用来提高应用程序的显示速度: 创意公社- ideaer0c7pANc&b:J5|j+m7n
将容器的 clipcontrols 属性设置为 false。
7nep;Eu%o/J+i1
/[%s5Q K)f q.|/s+}'T1恰当地使用 autoredraw。创意公社- ideaer"i2c2N+IR){0?C
创意公社- ideaerl5gyXwm!}V
使用 image 控件替代 picturebox 控件。创意公社- ideaer @ Z0o0l"OM(Z)j

8iwJ6p*Y2QX1设置属性时隐藏控件以避免多次重画。创意公社- ideaer.w s^4n'F+tl

2u}'r.mN O }Z.W,|K)o1使用 line 替代 pset。 创意公社- ideaerWS B$O{'NG
将容器的 clipcontrols 属性设置为 false创意公社- ideaer&Q3^4in#urdC
除非正在使用图形方法(line,pset,circle 和 print),否则将窗体、框架及 picturebox 控件的 clipcontrols 设置为 false(如果代码包含了在其它控件之后绘图的图形方法,则这可能导致不可预测的结果)。当 clipcontrols 设置为 false 时,在重画控件本身之前,visual basic 不会用背景覆盖控件。这在窗体包含大量控件时,会大大提高显示速度。
vde){yQI/o1详细信息 请参阅“使用文本和图形”中的“使用 autoredraw 和 clipcontrols 使图形分层”。
sz~DhU1恰当地使用 autoredraw创意公社- ideaero*X5q?nT
当窗体或控件的 autoredraw 设置为 true 时,visual basic 会利用位图重画该窗体或控件。这种方法虽然提高了简单情况的重画速度(例如,在删除覆盖在窗体或控件上的窗口后,窗体或控件重新显示),但会降低图形方法的速度。此时,visual basic 就会在 autoredraw 位图上进行图形方法操作,再把整个位图复制到屏幕上。这个过程也占用了相当数量的内存。创意公社- ideaer$uX.~f2R0zO _"W
如果应用程序产生的图形复杂但是不常改变,autoredraw 设置为 true 较为合适。如果图形需要经常改变,则 autoredraw 设置为 false 的效果更好,并且在 paint 事件中进行窗体或控件的图形方法操作。
E%?x+{&N/Wg;I1详细信息 请参阅“使用文本和图形”中的“使用 autoredraw 和 clipcontrols 使图形分层”。创意公社- ideaer1VnQ7D5tH
用 image 控件替代 picturebox 控件创意公社- ideaerC}$_%?-u
优化能够提高应用程序的速度,并减小其大小,所以要尽量应用优化技术。如果仅简单显示图片,并只对单击事件和鼠标操作作出响应,应使用 image 控件替代 picturebox。除非需要图片框提供的特殊功能时,如图形方法、包含其它控件的能力或动态数据交换 (dde),否则不要使用图片框。创意公社- ideaer9J(sT|(Q"R
设置属性时隐藏控件以避免多次重画
k*?`$Kuw3sb1重画的代价是昂贵的。重画的操作越少,应用程序就显得越快。减少重画次数的一种方法,就是操作控件时使其不可见。例如,假设在窗体的 resize 事件中调整数个列表框的大小:
}kWg/U.j;|8{%i!r1sub form_resize ()
)_k:D*V W\ \8K1dim i as integer, sheight as integer创意公社- ideaer(L JZF d3mr
   sheight = scaleheight / 4
$}&L3Qk&jm Z1   for i = 0 to 3
x-ih!pQ5gRL1      lstdisplay(i).move 0, i * sheight, _创意公社- ideaer n'W.w:IJ@
      scalewidth, sheight
P;y~P+q `6c1   next创意公社- ideaer/mb.o;f%l] ^Y
end sub创意公社- ideaer(t4}"ioPN ]n
该示例产生四次独立的重画,每个列表框一次。把所有的列表框放在图片框中,并在移动或调整列表框大小之前隐藏图片框,就会减少重画的次数。当再次使图片框可见时,所有的列表框一次画出:
,vrJh;Tc8r3p1sub form_resize ()创意公社- ideaerJ_1es1|
dim i as integer, sheight as integer
ES9P%P8U0I-E*H)?1   piccontainer.visible = false创意公社- ideaeri&Hx l?S ? j!_
   piccontainer.move 0, 0, scalewidth, scaleheight
/gRvx3DjY.y1   sheight = scaleheight / 4
9w-@l L_1   for i = 0 to 3创意公社- ideaer5?4T h#[6C`
      lstdisplay(i).move 0, i * sheight, _创意公社- ideaer k7YvBWbP%D7qH
      scalewidth, sheight创意公社- ideaerWvU^#l'rS M
   next
i*c8Q)jv oM#e1   piccontainer.visible = true
#lg.V^h6` Ik1end sub
Ee2E-}3Qv4Q1值得注意的是,该示例中使用了 move 方法替代设置 top 和 left 属性。move 方法只需一次操作就设置了这两个属性,所以节省了多余的重画。创意公社- ideaer~8d4{p{1?a
使用 line 替代 pset创意公社- ideaer@@ qB3np9B:G
使用 line 比使用一系列的 pset 方法快。避免使用 pset 方法,把一些点组成一条线由 line 方法一次画出。一般来说,简单、不常改变的图形元素采用形状和直线控件来处理比较合适;而复杂的或经常改变的图形则最好采用图形方法处理
FVE)zD+z1创意公社- ideaer'|n |O*|B7}

*S7c ^a8t$G1
b5w|}K1编译型和解释型应用程序的比较
7F]hJh*N'Im1创意公社- ideaer9k bN5ib!]V!J

Jo;a1@6B6yuc#sB{,_1创意公社- ideaer*`q\ zW/?
按照缺省规定,visual basic 将应用程序编译成可运行的解释型或 p-code 程序。运行时,动态链接库 (dll) 将翻译或解释执行程序中的指令。visual basic 专业版和企业版还可将程序编译成 .exe 本机代码。在许多情况中,运行本机代码比运行解释型代码本质上要快得多。但事情并非总是这样。以下是一些有关本机代码编译的一般指南:
c6OtB'q1若代码做了大量固定类型的、非字符串变量的基本操作,则其产生的本机代码将与编译的 p-code 操作码产生最大的反差。然而,对于复杂的经济计算或生成分形图形,用本机代码有很多好处。创意公社- ideaerIHT$U@;B8PA6OGT }+V
创意公社- ideaer,b#\Cj#Oc#m/yH,g
计算密集型程序,或在局部数据结构中处理大量的位和字节操作的程序,用本机代码就可获得明显的好处。
0] Emc3@Va,BC9t?1
r#|x:K W'J:yA-k9u1在许多程序中,特别是那些含有大量 windows api 调用,com 方法调用和字符串操作的程序,本机代码不比 p-code 快多少。
XiSN+w[ ML:l&_1创意公社- ideaer1aT v3`5V O2~*hF&m
如果应用程序主要含有来自 visual basic for applications 运行库的函数,那么就看不到多少本机代码的好处,这是因为 visual basic for applications 运行库已经高度优化了。创意公社- ideaer7{+M7q4_D j2vT C

(X6nC.bK.^s^1含有大量子例程调用而非内嵌过程的代码,用本机代码也似乎不太快。这是因为设置栈结构,初始化变量,返回时的清除等工作,用 p-code 引擎和用本机代码所花费的时间相同。
|R0F R~@O1注意,调用一次对象、dll 或 visual basic for applications 运行函数,都会消弱本机代码性能上的优点。这是因为执行代码所花时间相对地少,而大量时间(常常达到 90-95%)花在窗体、数据对象、windows dll,或 visual basic for applications 运行库,以及处理内部字符串和变量上。
Q \ ` ]Q6Sw(B+P1实际测试中,典型情况是客户应用程序总的执行时间有 5% 用于执行 p-code。因此,如果本机代码是瞬时执行的,则在这些程序中用本机代码也只能改进性能最高达 5%。
h-J`0O A#Yo1本机代码的目的是可让程序员用 basic 编写一小片代码或有大量计算的算法。这些,由于性能问题,在以前是决不可能的。使用这些运行非常快的“小片”,也能改善应用程序特定部分的响应,从而改进了整个应用程序的感觉性能。
,Q3U!c7P(C)xL1详细信息 关于本机代码的编译的详细信息,请参阅“再论编程”的“将工程编译成本地代码”。创意公社- ideaer6bv%L WCm)WAH6D

顶:16 踩:47
对本文中的事件或人物打分:
当前平均分:-1.41 (181次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.17 (104次打分)
【已经有147人表态】
47票
感动
16票
路过
14票
高兴
8票
难过
10票
搞笑
15票
愤怒
16票
无聊
21票
同情
上一篇 下一篇
发表评论
换一张

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】