“Dim myarray()as String”VS“Dim myarray()as Variant”

我总是害怕在假设分配不必要的大量内存的情况下声明variables。

最近正在努力提高电子表格的性能,但我却得到了相反的印象(请参阅下面的编辑): Dim myarray() as Variant改善了性能,与Dim myarray() as String相比Dim myarray() as String

这两个声明的主要区别和后果是什么?

在这里找不到明确的指导: https : //msdn.microsoft.com/en-us/library/aa711948.aspx

编辑:受控性能testing

我运行了一个受控的性能testing(将dim myarray() as Variant版本,创build一个副本并将两个variables更改为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

将数组声明为数组将保存的数据types是有意义的,这为将来查看您的代码的任何人提供了清晰度。 给代码提供可读性通常会更好,牺牲一些内存(尽pipe这可能取决于情况)。 例如,如果你的数组只包含string,那么将该数组声明为一个string。 而如果你的数组将包含整数和string的混合,那么应该使用一个变体。

从本质上讲,声明数组作为数组types是合乎逻辑的数组将保存。

如果要从工作表中填充数组,则必须将该variables声明为变体。 尝试填充已声明为string的数组(使用工作表中的值)将导致“types不匹配”debugging消息,而不pipe范围的值是否都是string。

这里是一些与VBA中的数组有关的MSDN文档 。

这就是我所声明的数组无论如何。 使代码更容易阅读,为任何未来的开发人员保存less量的内存。