100分求数组对象和collection对象那个快

hglai 2005-07-20 07:16:09
数组对象
dim a() as string
和collection对象
dim a as collection
那个要好点,比较以下几个方面:
读取速度:
写的速度:
站用的资源大小
有谁知道或者是测试过吗??
小第先谢谢了
...全文
326 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
viena 2005-11-03
  • 打赏
  • 举报
回复
Array Collection
ArrayList Vector 链表
单纯的比较,没有意义,适用于不同的情况
northwolves 2005-11-03
  • 打赏
  • 举报
回复
forms,controls,folders,files,Licenses,printers,nodes 等等都是集合,数组和集合的选择,具体情况具体对待.
northwolves 2005-11-03
  • 打赏
  • 举报
回复
一般来说,集合还是要慢.但某些情况下,用集合比数组操作起来方便很多.在某些情况下,将项目存储在集合中可能比存储在数组中效率更高.尤其处理较小的、动态的项目集时,使用集合更好一些.
winehero 2005-11-03
  • 打赏
  • 举报
回复
从存储结构上来说,显然数组快
hwshws123 2005-11-03
  • 打赏
  • 举报
回复
参与一下
upsuper 2005-07-21
  • 打赏
  • 举报
回复
我的试验表明在Next后加变量会减少时间~
zlt982001 2005-07-21
  • 打赏
  • 举报
回复
被楼上亢长的水贴晕死,以后请不要这样,转个连接好了
jxgzay 2005-07-20
  • 打赏
  • 举报
回复
循环体由几行代码组成。在这种情况下,你可以把循环展开。原因是循环会占用额外的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
' 正确的代码
For iCount = 1 to 10
' 执行操作
Next iCount

  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。



[本日志由 cnzx219 于 2005-07-12 11:39 PM 编辑]
引用通告地址 (0):http://www.mndsoft.com/blog//trackback.asp?tbID=446
模拟MSN风格面板选择控件 关于 cnzx219 发布源码




sking2008 于 2005-07-20 07:29 PM 发表评论:
初学的我受教育了,感谢!!!!!!!
初学的我受教育了,感谢!!!!!!!

crystal_126 于 2005-07-14 07:55 PM 发表评论:
第九项程序描述与标题相悖!
第九项程序描述与标题相悖!

3Zang 于 2005-07-14 08:25 AM 发表评论:
ms见过很有帮助
ms见过
很有帮助

cnzx219 于 2005-07-13 10:22 AM 发表评论:
本摘自csdn,但是经过更多人响应,有修改
本摘自csdn,但是经过更多人响应,有修改

laisiwei 于 2005-07-13 08:47 AM 发表评论:
9. 注意Next关键字后的变量名  在Next关键字后加上变量名...
9. 注意Next关键字后的变量名

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

' 错误的代码
For iCount = 1 to 10
' 执行操作
Next
' 正确的代码
For iCount = 1 to 10
' 执行操作
Next iCount


写错了?
jxgzay 2005-07-20
  • 打赏
  • 举报
回复
http://www.mndsoft.com/blog/blogview.asp?logID=446&cateID=

下面的这些方法可以帮助你提高代码的运行速度:

  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个字节。通常使用变体类型的目的是为了减少设计的工作量和代码量,也有的程序员图个省事而使用它。但是如果一个软件经过了严格设计和按照规范编码的话,完全可以避免使用变体类型。

  在这里顺带提一句,对于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次,而且
DooDu 2005-07-20
  • 打赏
  • 举报
回复
果然msdn上有说明,如小朱所言:

MSDN:

集合对象的构成
Collection 对象将每一项存储于 Variants 对象中。于是,能够添加到 Collection 对象里的内容列表就和能够存储到 Variants 中的内容列表是相同的。这包括标准数据类型、对象和数组- 但不包括用户定义类型。

不管 Variants 中存储的是什么,它都占 16 字节,因此使用 Collection 对象不如使用数组的效率
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
高。然而,不能 ReDim 一个 Collection 对象,ReDim Collection 对象能够使代码更清楚、更容易维

护。此外,集合对象按键能进行快速的查找,而数组却不能。

zlt982001 2005-07-20
  • 打赏
  • 举报
回复
数组快,不过 collection(集合) 可以按Key 检索Item,
而数组不行,Collection 可以插入多种不同对象,而数组不行
资源当然是数组更少
还有一种 是结合了两者有点得 叫 Scripting.Dictionary
具体看这 :
http://blog.csdn.net/zlt982001/archive/2005/04/15/349696.aspx
lc_mtt 2005-07-20
  • 打赏
  • 举报
回复
数组快,这是肯定的,collection用到链技术吧,所以慢,不过非常方便,因为做列队和做链都非常简单,本身就是一个链^_^
zhujiechang 2005-07-20
  • 打赏
  • 举报
回复
数组快.MSDN上也是这么说的。
jxgzay 2005-07-20
  • 打赏
  • 举报
回复
数组快。虽然我不太了解collection。
内存的运算是最快的。


maweifeng 2005-07-20
  • 打赏
  • 举报
回复
数组快,
http://www.cnblogs.com/maweifeng/archive/2005/06/29/183464.html
有测试。
Mars.CN 2005-07-20
  • 打赏
  • 举报
回复
好像没用过collection对象又好像用过
是什么?

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧