Vba &引用;Dim myarray()作为字符串;VS";Dim myarray()作为变量;
我总是害怕在假设会分配不必要的大量内存的情况下,将事物声明为变量 最近,为了提高电子表格的性能,我得到了相反的印象(请参见下面的编辑):Vba &引用;Dim myarray()作为字符串;VS";Dim myarray()作为变量;,vba,excel,declaration,variant,Vba,Excel,Declaration,Variant,我总是害怕在假设会分配不必要的大量内存的情况下,将事物声明为变量 最近,为了提高电子表格的性能,我得到了相反的印象(请参见下面的编辑):Dim myarray()作为变量比Dim myarray()作为字符串 这两项声明的主要区别和后果是什么 无法在此处找到明确的指导: 编辑:受控性能测试 我运行了一个受控性能测试(将dim myarray()作为变量版本,复制并将两个变量更改为dim myarray()作为字符串) 正如您在下面看到的,我错了,性能差异并不显著 Dim myarray()作为变
Dim myarray()作为变量
比Dim myarray()作为字符串
这两项声明的主要区别和后果是什么
无法在此处找到明确的指导:
编辑:受控性能测试
我运行了一个受控性能测试(将dim myarray()作为变量
版本,复制并将两个变量更改为dim myarray()作为字符串
)
正如您在下面看到的,我错了,性能差异并不显著
Dim myarray()作为变体版本
下午4:05:47开始
FXLoaded下午4:05:47 00:00
TD4:06:38下午00:51
LisofPCTD下午4:06:57 00:19
下午4:07:47 00:50
李索菲亚德4:08:14下午00:27
PrintCoBTD 4:08:46 PM 00:32
PrintCoBYD 4:09:18下午00:32
总计03:31 03:31
Dim myarray()作为字符串版本
下午4:25:53开始
FXLoaded下午4:25:53 00:00
TD4:26:53下午1:00
LisofPCTD下午4:27:10 00:17
下午4:28:07 00:57
李索菲亚德下午4:28:32 00:25
PrintCoBTD 4:29:03下午00:31
PrintCoBYD下午4:29:34 00:31
Total 03:41 03:41
将数组声明为数组将包含的任何数据类型都是有意义的,这为以后查看代码的任何人提供了清晰的信息。一般来说,最好让代码具有可读性,牺牲少许内存节省(尽管这可能取决于场景)。例如,如果数组仅包含字符串,则将数组声明为字符串。然而,如果数组将包含整数和字符串的混合物,则应使用变量
本质上,将数组声明为数据类型,该数据类型对于数组将要保存的内容是逻辑的
如果要从工作表填充数组,则必须将变量声明为变量。尝试填充已声明为字符串的数组(使用工作表中的值)将导致“类型不匹配”调试消息,无论该范围的值是否都是字符串
下面是一些与VBA中的数组相关的内容
无论如何,这就是我在声明数组时遵循的原则。使未来的开发人员更容易阅读代码>略微节省内存。您所做的唯一更改是将
Variant
切换为String
?您是否对代码计时以验证您的假设,即速度提高了?您提供的链接是指向VB.Net的,这与此没有直接关系。考虑到数组的灵活性,我非常喜欢使用变量,尤其是使用语法Dim myarray As Variant
(一种可以容纳数组而不是变量数组的变量。我使用过这样的东西,有多达100000个条目(或更多)除了YMMV没有问题。@JohnColeman我还没有这方面的资料,但我想你说的是正确的答案。数组是我见过的唯一一种类型,我建议你使用变量
类型。当你使用字符串
类型时,你必须考虑将字符串定义为数组所需的所有额外字符@Chrismas007我认为你是对的,在VBA中,保持数组是变量的主要有效用例,尽管我认为出于某种原因,如果你想使用for-each循环通过用户定义的集合或字典,那么你需要使用变量作为循环变量,即使集合已知,例如保持字符串。感觉像?你是seri我们需要像最初一样对其进行基准测试,然后再进行一次更改并再次进行基准测试。我们人类在判断时间方面是出了名的糟糕。