在VBA的世界里,有很多问题都存在两种截然对立的观点,比如:是否应该强制声明变量?是否应该手工释放变量?
关于第1个问题,咱们之前聊过了,这里不再重复说明;最近又常有朋友询问第2个问题:
VBA是否应该手工释放变量?
常用释放变量语句....▼
释放数组:
Erase arr
释放单元格对象:
Set rng = Nothing
释放类库引用:
Set dict = Nothing
……
需要吗?不需要吗?不需要吗?需要吗?
我们这里不谈VBA自身的变量释放机制,它靠不靠谱很难说。但尽管如此,需不需要手工释放变量都是一个相对的概念:这是由变量大小和你电脑的性能决定的。
假设你的电脑内存有10桶水那么大,而你的变量只是一碗水,你装了一碗水,把这碗水倒掉,再装另外一碗水——就没意义。你那几碗水相比10桶的内存而言和一碗水其实没差别,而反复操作碗的过程,却在实际上拉低了代码的运行效率,摊手,对不对?
但是,假如你的变量很大,是按桶来算的,你上来就装了9桶水,然后又要装2桶水,而你的内存只有10桶水,那么如果前面9桶水没倒掉,不但代码运算效率受影响,甚至还会内存溢出。耸肩,是不是?
把碗和桶的水倒掉就是在释放变量所占的内存,因此不同情况下的最优选择就不一样。
打个响指,只能说,对于大部分、小脚本性质的VBA代码来说,❶变量的大小也就是几碗水,❷现在电脑的性能又远胜往昔,❸从运算效率角度出发,❹反复手工释放变量就真不是好事。你觉得你是为了电脑好,让它腾出内存空间,全心全意为你服务,但电脑觉得你为了一碗水折腾来折腾去,真TM好烦啊,估计恨不得对你漏下心电感应。
曾经有个教员反复教导我们说,一切问题都要从实际出发,具体问题要具体分析……可不就这么回事吗?——嘿!字数凑够原创标准了,挥手作别,下期再见吧。
👇本文由公众号“Excel星球”首发。
点击阅读原文,加入星光的Excel社群!