我总是害怕在假设将分配不必要的大量内存的情况下将事物声明为变量。
最近我在努力提高一个电子表格的性能,然而我得到了相反的印象(见下面的编辑):与Dim myarray() as String
相比,Dim myarray() as Variant
正在提高性能
这两个声明的主要区别和后果是什么?
在这里找不到明确的指导:https://msdn.microsoft.com/en-us/library/aa711948.aspx
编辑:受控性能测试
我运行了一个受控性能测试(取dim myarray() as Variant
版本,复制并将两个变量更改为Dim myarray() as String
)
如下所示,我搞错了,性能差异并不显著。
Dim myarray() as Variant VERSION
Start 4:05:47 PM
FXLoaded 4:05:47 PM 00:00
TDLoaded 4:06:38 PM 00:51
LisofPCTD 4:06:57 PM 00:19
YDLoaded 4:07:47 PM 00:50
LisofPCYD 4:08:14 PM 00:27
PrintCoBTD 4:08:46 PM 00:32
PrintCoBYD 4:09:18 PM 00:32
Total 03:31 03:31
Dim myarray() as String VERSION
Start 4:25:53 PM
FXLoaded 4:25:53 PM 00:00
TDLoaded 4:26:53 PM 01:00
LisofPCTD 4:27:10 PM 00:17
YDLoaded 4:28:07 PM 00:57
LisofPCYD 4:28:32 PM 00:25
PrintCoBTD 4:29:03 PM 00:31
PrintCoBYD 4:29:34 PM 00:31
Total 03:41 03:41
将数组声明为数组将保存的任何数据类型是有意义的,这为将来查看您的代码的任何人提供了清晰度。通常最好是让代码具有可读性,牺牲一点内存节省(尽管这可能取决于场景)。例如,如果数组只包含字符串,则将该数组声明为字符串。然而,如果你的数组将保存整数和字符串的混合,则应该使用变体。
实质上,将数组声明为数据类型,该数据类型与数组将要保存的内容是逻辑上的。
如果要从工作表填充数组,则必须将变量声明为变体。尝试填充已声明为字符串的数组(使用来自工作表的值)将导致"类型不匹配"调试消息,无论该范围的值是否都是字符串。
下面是一些关于VBA中数组的MSDN文档。
这就是我在声明数组时遵循的原则。: :稍微节省内存