中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual Basic > 综合文章
VB超频快餐,让我一次用个够!(五)
作者:未知 时间:2004-02-14 12:12 出处:eNet硅谷动力 责编:chinaitpower
              摘要:VB超频快餐,让我一次用个够!(五)
另辟蹊径处理字符串中的字符:字节数组法

当要处理字符串中的每一个字符时,可以将字符串赋值到一个byte数组中进行操作。要记住:每一个Unicode字符对应双字节。这种方法通常要快许多,因为节省了大量的Mid$函数操作以及大量的临时字符串空间。下面的代码是统计字符串中空格数目的最快方法

Dim b() as Byte, count As Integer

b() = source$

For i = 0 to UBound(b) Step LenB("A")

If b(i) = 32 Then count = count + 1

Next

请注意上面代码中LenB()函数的特殊用法:在VB4(32位)、VB5和VB6中它返回数值2, 在VB4(16位)中返回数值1。因此,我们就可以使用同一代码段,而无需#If编译指令。

快速清除数组部分内容

清除动态数组的最快方法是使用ReDim,清除静态数组则是使用删除。但是如果只想清除数组的一部分内容,怎么办呢?看上去似乎只能使用For-Next循环了。

如果处理的是数字数组,有一个较快的方法。它基于ZeroMemory API函数,正如函数名所示,它能将一块内存区域填充为0。看看怎么应用这个函数来清除一个Long类型数组的一部分内容:

Private Declare Sub ZeroMemory Lib "kernel32" Alias "RtlZeroMemory" (dest As _

Any, ByVal Bytes As Long)

’定义数组,填充数据

Dim a(1000) As Long

For i = 1 To UBound(a)

a(i) = i

Next

’从a(200)开始清除100个元素内容

ZeroMemory a(200), 100 * Len(a(1))

请注意上述代码中清除长度的表示方法,使用Len()函数保证了当数组类型改变时代码仍然有效。


快速初始化Variant和String类型数组

VB中没有提供定义数组并同时初始化其内容的方法,所以大多数情况下,必须单独地设置每一个元素,就象下面一样:

Dim strArray(0 To 3) As String

strArray(0) = "Spring"

strArray(1) = "Summer"

strArray(2) = "Fall"

strArray(3) = "Winter"

在VB4、VB5和VB6中,可以使用Array()函数随意创建一个Variants类型数组:

Dim varArray() As Variant

varArray() = Array("Spring", "Summer", "Fall", "Winter")

但却没有同样的函数能创建非Variant类型数组。但是我们发现,在VB6中可以使用Split()函数创建字符串数组:

Dim varArray() As String

’由Split建立的数组下标通常是从0开始的

varArray() = Split("Spring;Summer;Fall;Winter", ";")

在VB6中,同样能充分利用函数返回数组的能力,创建数组初始化程序段。比如下面的代码段:

Function ArrayInt(ParamArray values() As Variant) As Integer()

Dim i As Long

ReDim res(0 To UBound(values)) As Integer

For i = 0 To UBound(values)

res(i) = values(i)

Next

ArrayInt = res()

End Function

同时,也可以创建一个子程序段来检测传递给它的数值的类型,并返回正确类型的数组。这种情况下,函数应该定义为返回Variant。


访问简单变量总是快于数组元素值

读写数组中的元素速度通常都慢于访问一个简单变量,因此,如果在一个循环中要重复使用同一数组元素值,就应该分配数组元素值到临时变量中并使用这个变量。下面举一个例子,检测整数数组中是否存在重复项:

Function AnyDuplicates(intArray() As Integer) As Boolean

’如果数组包含重复项,返回True

Dim i As Long, j As Long,

Dim lastItem As Long

Dim value As Integer

’只计算机UBound()一次

lastItem = UBound(intArray)

For i = LBound(intArray) To lastItem

’ 保存intArray(i)到非数组变量中

value = intArray(i)

For j = i + 1 To lastItem

If value = intArray(j) Then

AnyDuplicates = True

Exit Function

End If

Next

Next

’没有发现重复项

AnyDuplicates = False

End Function

上述程序有2层循环,通过缓存intArray(i)的数值到一个普通的、非数组变量中,节省了CPU运行时间。经测试,这将提高80%的速度。

创建新表时,快速拷贝字段

在VB6中,无需离开开发环境就可以创建新的SQL Server和Oracle表。方法很简单:打开DataView窗口,用鼠标右键单击数据库的表文件夹,再选择新表格菜单命令。

当处理相似表格时,就是说具有许多相同字段的表格,我们完全可以在很短的时间内容完成设定操作。具体步骤是:在设计模式下打开源表格,加亮选择要拷贝字段对应的行,按Ctrl-C拷贝信息到粘贴板;然后,在设计模式打开目标表格,将光标置于要粘贴字段所在的位置,按Ctrl-V。

这样,就拷贝了所有的字段名称以及它们所带的属性。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有