VB用了数组也太慢请问高手问题出在哪里如何改

VB用了数组也太慢请问高手问题出在哪里如何改附件http://pan.baidu.com/s/1ntiiNDf... VB用了数组也太慢请问高手问题出在哪里如何改
附件http://pan.baidu.com/s/1ntiiNDf
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励30(财富值+成长值)+提问者悬赏50(财富值+成长值)
szqaly
2015-05-14 · TA获得超过1745个赞
知道大有可为答主
回答量:2107
采纳率:77%
帮助的人:1525万
展开全部

有两个地方可改进

  1. redim preserve  这个语句每循环一次重定义一次数组长度,效率很底的。我做过一个试验,数组长度从1依次扩展到1亿花了5、6分钟,但是从1亿逐渐缩小到1才两三秒。原因是数组扩展时它要重新分配一个完整空间,然后把原有数据拷贝过去,而缩小的时候不需要重新分配空间,只是把最大下标指针前移就可以了。

  2. 通过循环数组元素连接成串也是很慢的,Join函数可取代。

  3. 如果要更快一些,就用词典对象,这个可以打开附件看看差别。

追问
好高手非加不可,计算交集好快,计算并集速度慢了一点,VB如何用词对象。再问一次吧
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
murphybao
2015-05-14 · TA获得超过1210个赞
知道小有建树答主
回答量:1002
采纳率:66%
帮助的人:539万
展开全部
你跑完多少秒,统计了吗,你可以关闭界面更新进行计算输出,完了再打开。
Application.ScreenUpdating = False
计算输出
Application.ScreenUpdating = True
更多追问追答
追问
我问的是VB交集太慢如何改写,VBA太过超快还改什么?
追答
UBound(A)这种不要放到循环里,循环前计算一次,放到变量里
Dim Count As Integer
Count = UBound(A)
For i = 1 To Count
......

不要在循环里不停的Redim
开始定义的足够大(比如A+B那么大),不用的设置值为空,输出时判断为空不输出就可以了
如果只用前面的,碰到为空停止输出,这样效率更高
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式