Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6778|回复: 10

[已解决]整型的运行速度为什么比长整型的慢

[复制链接]
发表于 2014-5-18 01:01 | 显示全部楼层 |阅读模式
本帖最后由 FnG 于 2014-5-18 11:39 编辑
  1. Sub 按钮1_Click()
  2. t1 = Timer
  3. Dim i%
  4. For i = 1 To 30000
  5.     Cells(i, 1) = i
  6. Next
  7. t2 = Timer
  8. Dim j&
  9. For j = 1 To 30000
  10.     Cells(j, 2) = j
  11. Next
  12. t3 = Timer
  13. MsgBox "%的时间:" & t2 - t1 & Chr(10) & "&的时间:" & t3 - t2
  14. End Sub
复制代码
代码测试结果:
QQ截图20140518010021.png
用这个例子测试%与&的速度,为什么&的速度反而更快?明明%占两个字节,&占四个字节,求解。谢谢

整型的运行速度为什么比长整型的慢.rar (195.7 KB, 下载次数: 2)
发表于 2014-5-18 01:13 | 显示全部楼层
我比较好奇64位系统为什么比32位快~~{:02:}

评分

参与人数 1 -2 收起 理由
FnG -2 又来我这里灌水,上次的教训还不够。

查看全部评分

回复

使用道具 举报

发表于 2014-5-18 01:35 | 显示全部楼层
  1. Sub 按钮1_Click()
  2. Dim t1, t2, t3
  3. t1 = Timer
  4. Dim i&
  5. For i = 1 To 30000
  6.     Cells(i, 1) = i
  7. Next
  8. t2 = Timer
  9. Dim j%
  10. For j = 1 To 30000
  11.     Cells(j, 2) = j
  12. Next
  13. t3 = Timer
  14. MsgBox "&的时间:" & t2 - t1 & Chr(10) & "%的时间:" & t3 - t2
  15. End Sub
复制代码
具体的计算原理不知道是什么,不过,你反过来试试看。这样就&比%慢了

评分

参与人数 1 +6 收起 理由
FnG + 6 真的是这样

查看全部评分

回复

使用道具 举报

发表于 2014-5-18 09:07 | 显示全部楼层
本帖最后由 qh8600 于 2014-5-18 09:08 编辑
蓝粆 发表于 2014-5-18 01:13
我比较好奇64位系统为什么比32位快~~

integer类型使用2byte(16bit)内存空间
而long类型使用4byte(32bit)内存空间
正常情况下integer比long占用内存小,应该运行快
但是在32位系统下,long类型正好匹配不用转换
而integer类型,先要把数据转换为32bit,然后执行程序
所以在32位系统下long要比integer快
在64位系统下,两种类型都要转换为64bit,然后执行程序
ingeter占用内存小,所以比long快
另外,刚才龙哥的说法,我的理解是,在一个过程中,先运行的循环要快
后面的循环在前面循环没有释放内存下,速度会慢点
30000行数据基本上没什么差距的
上百万行,会有差距
回错楼层了

回复

使用道具 举报

发表于 2014-5-18 09:08 | 显示全部楼层    本楼为最佳答案   

integer类型使用2byte(16bit)内存空间
而long类型使用4byte(32bit)内存空间
正常情况下integer比long占用内存小,应该运行快
但是在32位系统下,long类型正好匹配不用转换
而integer类型,先要把数据转换为32bit,然后执行程序
所以在32位系统下long要比integer快
在64位系统下,两种类型都要转换为64bit,然后执行程序
ingeter占用内存小,所以比long快
另外,刚才龙哥的说法,我的理解是,在一个过程中,先运行的循环要快
后面的循环在前面循环没有释放内存下,速度会慢点
30000行数据基本上没什么差距的
上百万行,会有差距


评分

参与人数 1 +6 收起 理由
FnG + 6 谢谢,讲得很清楚。

查看全部评分

回复

使用道具 举报

发表于 2014-5-18 09:34 | 显示全部楼层
qh8600 发表于 2014-5-18 09:07
integer类型使用2byte(16bit)内存空间
而long类型使用4byte(32bit)内存空间
正常情况下integer比long占 ...

嗯嗯  学习了~~
回复

使用道具 举报

发表于 2014-5-18 09:35 | 显示全部楼层
xdragon 发表于 2014-5-18 01:35
具体的计算原理不知道是什么,不过,你反过来试试看。这样就&比%慢了

嗯嗯 谢谢龙哥~~

点评

当心再被扣分哈!哇咔咔!  发表于 2014-5-18 09:36
回复

使用道具 举报

发表于 2014-5-18 09:45 | 显示全部楼层
xdragon 发表于 2014-5-18 01:35
具体的计算原理不知道是什么,不过,你反过来试试看。这样就&比%慢了

分开运行了  没连在一起~~如楼上所说
  1. Sub 按钮1_Click()
  2. Dim t1
  3. t1 = Timer
  4. Dim i&
  5. For i = 1 To 30000
  6.     Cells(i, 1) = i
  7. Next
  8. MsgBox "&的时间:" & Timer - t1
  9. End Sub
  10. Sub a()
  11. Dim t
  12. t = Timer
  13. Dim j%
  14. For j = 1 To 30000
  15.     Cells(j, 2) = j
  16. Next
  17. MsgBox "&的时间:" & Timer - t
  18. End Sub
复制代码
%.jpg
&.jpg

评分

参与人数 1 +6 收起 理由
FnG + 6 嘿嘿,加的永远比扣的多。

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-5-18 11:38 | 显示全部楼层
qh8600 发表于 2014-5-18 09:08
integer类型使用2byte(16bit)内存空间
而long类型使用4byte(32bit)内存空间
正常情况下integer比long占 ...

原来是这样,学习了,谢谢!今天分不够了,明天再给你加分。
回复

使用道具 举报

发表于 2014-5-18 11:45 | 显示全部楼层
正确的认识:

两者速度的差别不大,但为了方便起见,应养成习惯一律设置为Long长整形变量。

即,Integer变量类型已经是毫无存在必要的时代遗留产物。


…………
然而,由于以前的书本都是默认先定义为Integer,不够时才定义为Long类型的。

我觉得至少我们在当老师时,应该告诉学生,Integer变量已经过时,不需要了。


评分

参与人数 1 +6 收起 理由
FnG + 6 谢谢香川老师

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-30 18:55 , Processed in 0.318201 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表