当前位置:首页 > 代码 > 正文

vb6编译为p代码(vb6程序)

admin 发布:2022-12-19 18:55 134


本篇文章给大家谈谈vb6编译为p代码,以及vb6程序对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何编写高质量的VB代码

1. 使用整数(Integer)和长整数(Long)

提高代码运行速度最简单的方法莫过于使用正确的数据类型了。也许你不相信,但是正确地选择数据类型可以大幅度提升代码的性能。在大多数情况下,程序员可以将Single,Double和Currency类型的变量替换为Integer或Long类型的变量,因为VB处理Integer和Long的能力远远高于处理其它几种数据类型。

在大多数情况下,程序员选择使用Single或Double的原因是因为它们能够保存小数。但是小数也可以保存在Integer类型的变量中。例如程序中约定有三位小数,那么只需要将保存在Integer变量中的数值除以1000就可以得到结果。根据我的经验,使用Integer和Long替代Single,Double和Currency后,代码的运行速度可以提高将近10倍。

2. 避免使用变体

对于一个VB程序员来说,这是再明显不过的事情了。变体类型的变量需要16个字节的空间来保存数据,而一个整数(Integer)只需要2个字节。通常使用变体类型的目的是为了减少设计的工4作量和代码量,也有的程序员图个省事而使用它。但是如果一个软件经过了严格设计和按照规范编码的话,完全可以避免使用变体类型。

在这里顺带提一句,对于Object对象也存在同样的问题。请看下面的代码:

Dim FSO

Set FSO = New Scripting.FileSystemObject

Dim FSO as object

Set FSO = New Scripting.FileSystemObject

上面的代码由于在申明的时候没有指定数据类型,在赋值时将浪费内存和CPU时间。正确的代码应该象下面这样:

Dim FSO as New FileSystemObject

3. 尽量避免使用属性

在平时的代码中,最常见的比较低效的代码就是在可以使用变量的情况下,反复使用属性(Property),尤其是在循环中。要知道存取变量的速度是存取属性的速度的20倍左右。下面这段代码是很多程序员在程序中会使用到的:

Dim intCon as Integer

For intCon = 0 to Ubound(SomVar())

Text1.Text = Text1.Text vbcrlf SomeVar(intCon)

Next intCon

下面这段代码的执行速度是上面代码的20倍。

Dim intCon as Integer

Dim sOutput as String

For intCon = 0 to Ubound(SomeVar())

sOutput = sOutput vbCrlf

SomeVar(intCon)

Next

Text1.Text = sOutput

4. 尽量使用数组,避免使用集合

除非你必须使用集合(Collection),否则你应该尽量使用数组。据测试,数组的存取速度可以达到集合的100倍。这个数字听起来有点骇人听闻,但是如果你考虑到集合是一个对象,你就会明白为什么差异会这么大。

5. 展开小的循环体

在编码的时候,有可能遇到这种情况:一个循环体只会循环2到3次,而且循环体由几行代码组成。在这种情况下,你可以把循环展开。原因是循环会占用额外的CPU时间。但是如果循环比较复杂,你就没有必要这样做了。

6. 避免使用很短的函数

和使用小的循环体相同,调用只有几行代码的函数也是不经济的--调用函数所花费的时间或许比执行函数中的代码需要更长的时间。在这种情况下,你可以把函数中的代码拷贝到原来调用函数的地方。

7. 减少对子对象的引用

在VB中,通过使用.来实现对象的引用。例如:

Form1.Text1.Text

在上面的例子中,程序引用了两个对象:Form1和Text1。利用这种方法引用效率很低。但遗憾的是,没有办法可以避免它。程序员唯一可以做就是使用With或者将用另一个对象保存子对象(Text1)。

注释: 使用With

With frmMain.Text1

.Text = "Learn VB"

.Alignment = 0

.Tag = "Its my life"

.BackColor = vbBlack

.ForeColor = vbWhite

End With

或者

注释: 使用另一个对象保存子对象

Dim txtTextBox as TextBox

Set txtTextBox = frmMain.Text1

TxtTextBox.Text = "Learn VB"

TxtTextBox.Alignment = 0

TxtTextBox.Tag = "Its my life"

TxtTextBox.BackColor = vbBlack

TxtTextBox.ForeColor = vbWhite 注意,上面提到的方法只适用于需要对一个对象的子对象进行操作的时候,下面这段代码是不正确的:

With Text1

.Text = "Learn VB"

.Alignment = 0

.Tag = "Its my life"

.BackColor = vbBlack

.ForeColor = vbWhite

End With

很不幸的是,我们常常可以在实际的代码中发现类似于上面的代码。这样做只会使代码的执行速度更慢。原因是With块编译后会形成一个分枝,会增加了额外的处理工作。

8. 检查字符串是否为空

大多数程序员在检查字符串是否为空时会使用下面的方法:

If Text1.Text = "" then

注释: 执行操作

End if

很不幸,进行字符串比较需要的处理量甚至比读取属性还要大。因此我建议大家使用下面的方法:

If Len(Text1.Text) = 0 then

注释: 执行操作

End if

9. 去除Next关键字后的变量名

在Next关键字后加上变量名会导致代码的效率下降。我也不知道为什么会这样,只是一个经验而已。不过我想很少有程序员会这样画蛇添足,毕竟大多数程序员都是惜字如金的人。

注释: 错误的代码

For iCount = 1 to 10

注释: 执行操作

Next iCount

注释: 正确的代码

For iCount = 1 to 10

注释: 执行操作

Next

10. 使用数组,而不是多个变量

当你有多个保存类似数据的变量时,可以考虑将他们用一个数组代替。在VB中,数组是最高效的数据结构之一。

11. 使用动态数组,而不是静态数组

使用动态数组对代码的执行速度不会产生太大的影响,但是在某些情况下可以节约大量的资源。

12. 销毁对象

无论编写的是什么软件,程序员都需要考虑在用户决定终止软件运行后释放软件占用的内存空间。但遗憾的是很多程序员对这一点好像并不是很在意。正确的做法是在退出程序前需要销毁程序中使用的对象。例如:

Dim FSO as New FileSystemObject

' 执行操作

' 销毁对象

Set FSO = Nothing

对于窗体,可以进行卸载:

Unload frmMain

Set frmMain = Nothing

13. 变长和定长字符串

从技术上来说,与变长字符串相比,定长字符串需要较少的处理时间和空间。但是定长字符串的缺点在于在很多情况下,你都需要调用Trim函数以去除字符串末的空字符,这样反而会降低代码效率。所以除非是字符串的长度不会变化,否则还是使用变长字符串。

14. 使用类模块,而不是ActiveX控件

除非ActiveX控件涉及到用户界面,否则尽量使用轻量的对象,例如类。这两者之间的效率有很大差异。

15. 使用内部对象

在涉及到使用ActiveX控件和DLL的时候,很多程序员喜欢将它们编译好,然后再加入工程中。我建议你最好不要这样做,因为从VB连接到一个外部对象需要耗费大量的CPU处理能力。每当你调用方法或存取属性的时候,都会浪费大量的系统资源。如果你有ActiveX控件或DLL的源代码,将它们作为工程的私有对象。

16. 减少模块的数量

有些人喜欢将通用的函数保存在模块中,对于这一点我表示赞同。但是在一个模块中只写上二三十行代码就有些可笑了。如果你不是非常需要模块,尽量不要使用它。这样做的原因是因为只有在模块中的函数或变量被调用时,VB才将模块加载到内存中;当VB应用程序退出时,才会从内存中卸载这些模块。如果代码中只有一个模块,VB就只会进行一次加载操作,这样代码的效率就得到了提高;反之如果代码中有多个模块,VB会进行多次加载操作,代码的效率会降低。

17. 使用对象数组

当设计用户界面时,对于同样类型的控件,程序员应该尽量使用对象数组。你可以做一个实验:在窗口上添加100个PictureBox,每个PictureBox都有不同的名称,运行程序。然后创建一个新的工程,同样在窗口上添加100个PictureBox,不过这一次使用对象数组,运行程序,你可以注意到两个程序加载时间上的差别。

18. 使用Move方法

在改变对象的位置时,有些程序员喜欢使用Width,Height,Top和Left属性。例如:

Image1.Width = 100

Image1.Height = 100

Image1.Top = 0

Image1.Left = 0

实际上这样做效率很低,因为程序修改了四个属性,而且每次修改之后,窗口都会被重绘。正确的做法是使用Move方法:

Image1.Move 0,0,100,100

19. 减少图片的使用

图片将占用大量内存,而且处理图片也需要占用很多CPU资源。在软件中,如果可能的话,可以考虑用背景色来替代图片--当然这只是从技术人员的角度出发看这个问题。

20. 使用ActiveX DLL,而不是ActiveX控件

如果你设计的ActiveX对象不涉及到用户界面,使用ActiveX DLL。

编译优化

我所见过的很多VB程序员从来没有使用过编译选项,也没有试图搞清楚各个选项之间的差别。下面让我们来看一下各个选项的具体含义。

1. P-代码(伪代码)和本机代码

你可以选择将软件编译为P-代码或是本机代码。缺省选项是本机代码。那什么是P-代码和本机代码呢?

P-代码:当在VB中执行代码时,VB首先是将代码编译为P-代码,然后再解释执行编译好的P-代码。在编译环境下,使用这种代码要比本机代码快。选择P-代码后,编译时VB将伪代码放入一个EXE文件中。

本机代码:本机代码是VB6以后才推出的选项。当编译为EXE文件后,本机代码的执行速度比P-代码快。选择本机代码后,编译时VB使用机器指令生成EXE文件。

在使用本机代码进行编译时,我发现有时候会引入一些莫名其妙的错误。在编译环境中我的代码完全正确地被执行了,但是用本机代码选项生成的EXE文件却不能正确执行。通常这种情况是在卸载窗口或弹出打印窗口时发生的。我通过在代码中加入DoEvent语句解决了这个问题。当然出现这种情况的几率非常少,也许有些VB程序员从来没有遇到过,但是它的确存在。

在本机代码中还有几个选项:

a) 代码速度优化:该选项可以编译出速度较快的执行文件,但执行文件比较大。推荐使用

b) 代码大小优化:该选项可以编译出比较小的执行文件,但是以牺牲速度为代价的,不推荐使用。

c) 无优化:该选项只是将P-代码转化为本机代码,没有做任何优化。在调试代码时可以使用。

d) 针对Pentium Pro优化:虽然该项不是本机代码中的缺省选项,但是我通常会使用该选项。该选项编译出的可执行程序在Pentium Pro和Pentium 2以上的机器上可以运行得更快,而在比较老的机器上要稍稍慢一些。考虑到现在用Pentium 2都是落伍,所以推荐大家使用该选项。

e) 产生符号化调试信息:该项在编译过程中生成一些调试信息,使用户可以利用Visual C++一类的工具来调试编译好的代码。使用该选项会生成一个.pdf文件,该文件记录了可执行文件中的标志信息。当程序拥有API函数或DLL调用时,该选项还是比较有帮助的。

2. 高级优化

高级优化中的设置可以帮助你提高软件的速度,但是有时候也会引入一些错误,因此我建议大家尽量小心地使用它们。如果在代码中有比较大的循环体或者复杂的数学运算时,选中高级优化中的某些项会大幅度提升代码的性能。如果你使用了高级优化功能,我建议你严格测试编译好的文件。

a) 假定无别名:可以提高循环体中代码的执行效率,但是在如果通过变量的引用改变变量值的情况下,例如调用一个方法,变量的引用作为方法的参数,在方法中改变了变量的值的话,就会引发错误。有可能只是返回的结果错误,也有可能是导致程序中断运行的严重错误。

b) 取消数组绑定检查、取消整数溢出检查和取消浮点错误检查:在程序运行时,如果通过这些检查发现了错误,错误处理代码会处理这些错误。但是如果取消了这些检查,发生了错误程序就无法处理。只有当你确定你的代码中不会出现上面的这些错误时,你才可以使用这些选项。它们将使软件的性能得到很大的提升。

c) 允许不舍入的浮点操作:选择该选项可以是编译出来的程序更快地处理浮点操作。它唯一的缺点就是在比较两个浮点数时可能会导致不正确的结果。

d) 取消Pentium FDIV安全检查:该选项是针对一些老的Pentium芯片设置的,现在看来已经过时了。

vb编译时本机代码和P代码有什么不同

P代码是VB程序生成的伪代码,可讲是一种解释型的代码,如果你用VB的反编译程序,则有可能把那个VB程序反编译出代码,不过P代码在数据库的方面上效率并不比本机代码的低,而用本机代码方式生成的EXE则可算是真正的EXE吧.....代码执行的效率比较高......一般来说用的都是本机代码.

vb编译为“本机代码”和“P-代码”有什么不同

按照缺省规定,Visual Basic 将应用程序编译成可运行的解释型或 P-code 程序。运行时,动态链接库 (DLL) 将翻译或解释执行程序中的指令。

用“本机代码”选项来编译工程意味着您写的代码将完整地编译为处理器芯片的本地指令,而不是编译为p-code。这将大大加速循环和数学计算,并可以加速对 MSVBVM60.DLL提供的服务程序的调用。然而,这并不能减少对 DLL 的需要。

选中“编译为P-代码”,VB将应用程序编译成解释执行的P-代码程序。运行P-代码程序时,动态链接库(DLL)将翻译或解释执行程序中的指令。在许多情况下,运行本机代码比运行解释型代码本质上要快得多。

P代码似乎没什么优点喔,我唯一知道的就是编译为P代码较难破解。

Microsoft Visual Basic 6.0是一个RAD(Rapid Application Development)工具,它具有把应用程序编译成P代码或本机代码的灵活性。把应用程序编译成P代码可以使代码的长度被优化为最小。这种代码长度较 小的特点使P代码在低带宽情况下成为创建Internet应用程序的最佳选择。本机代码的编译过程对速度进行了很好的优化(将快至20倍),但是所产生的 可执行文件长度变大。Visual Basic 6.0是既支持通过P代码又支持通过本机代码快速开发应用程序的唯一RAD工具。

p代码运行可能要慢一些,但是兼容性较好、文件小,发布时建议使用P代码

这条意见 好像不对哦。

两种都应该要vb运行库的,一个要的是速度,一个要的是文件大小。

按照默认规定,Visual Basic将应用程序编译成可运行的解释型或P代码(P-Code)程序。运行时,动态链接库(DLL)将翻译或解释执行程序中的指令。在许多情况下,运行本机代码比运行解释型代码本质上要快的多。

编译为本机代码时应注意以下一些事项:

1、若代码做了大量固定类型的、非字符串变量的基本操作,则其产生的本机代码将比编译的P-Code操作码产生最大的反差。但是,对于复杂的经济计算或生成分形图形,用本机代码有很多好处。

2、计算密集型程序或在局部数据结构中处理大量的位和字节操作的程序,用本机代码就可获得明显的好处。

3、在多数的程序中,特别是那些含有大量Windows Api调用、COM方法调用和字符串操作的程序中,本机代码不比P-Code快多少。

4、含有大量子例程调用而非内嵌过程的代码,用本机代码也不是很快。

VB6自带编译器的“本机代码”和“P代码”各是什么?求答案

该选项卡设置工程编译时的条件。选项卡选项“编译为 P-代码”

用 p 代码来编译工程。存储在 .vbp 文件中的设置值将被覆盖掉。

“编译为本机代码”

用带有选定最优化的原码来编译工程。存储在 .vbp 文件中的设置值将被覆盖掉。

“快速代码优化”- 通过指示编译器在速度和大小之间首选速度,使 .exe 和 .dll 文件的速度最快。编译器可以减少许多功能上跟机器码序列相同的构造。在某些情况下,这种不同提供了用大小来换取速度的权衡交换。

“小代码优化”- 通过指示编译器在速度和大小之间首选大小,来使 .exe 和 .dll 文件最小。编译器可以减少许多功能上跟机器码序列相同的构造。如果不选中这个选项,代码可能就会大一些,但是速度会更快一些。

“非优化”- 无优化地编译。

“流行的 Pentium Pro#8482;”- 优化所创建的代码,优化方向是使之更有利于 Pentium Pro#8482; 处理器来处理。如果在程序中使用了这个选项,则意味着仅仅是为 Pentium Pro#8482; 处理器所创建的代码。用此选项产生的代码仍然可以在更早期的处理器上运行,但是工作起来性能不是那么好。

“创建符号化调试信息”- 在可执行文件或者 DLL 文件中产生符号调试信息。用此选项创建的可执行文件可以用 Visual C++ 或者具有 CodeView 风格调试信息的调试器来调试。设置这个选项将为可执行文件产生一个带有符号信息的 .pdb 文件。

“高级优化”

显示“高级优化”对话框。

给程序设置一个基地址,从而覆盖 .dll 文件的缺省位置(在 0 X 10,000,000 处)。操作系统首先试图在指定的或者缺省的位置加载一个程序。如果没有足够空间,那么系统将重新定位该程序。

VB编译为P-代码是什么意思

p代码:全称是pseudo-code,就是伪代码的意思,在VB编译中,有两种编译方式,一种是Native-Code(本地代码),另一种就是p-code。P-code 或伪代码,是介于 Basic 程序中的高级指令和计算机处理器执行的低级本机代码之间的一种中间步骤。

无论选择哪个,都需要运行库,不过自WINXP以后版本都有自带VB6运行库的。

虽然VBGOOD等论坛已经有牛人使用VB6写成机器+汇编代码,脱离运行库,但是,程序会变得臃肿,原理就是将运行库集成自身或者全部使用API函数。

关于vb6编译为p代码和vb6程序的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/18796.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载