解除内存会降低性能吗?

时间:2011-11-03 08:59:53

标签: optimization vba language-agnostic memory-management

这是所有编程语言的基本问题,但我对VBA很熟悉。所以我使用的是vba代码。我对释放内存有疑问。当我们擦除或交换分配的内容时,性能是否会降低?

之类的东西

方法I 我们取消分配已分配的内存

sub my_function()
     Dim a() as string
     redim a(1 to 15)
     'some for loop  goes here aroung 50 iterations
     erase a ' Deallocate the array
     ' some piece of code goes here may be 40 lines
end sub

方法II 我们不会释放任何内存

sub my_function()
     Dim a() as string
     redim a(1 to 15)
     'some for loop  goes here aroung 50 iterations
     'some piece of code goes here may be 40 lines
end sub

方法III 我们在最后一个法规中取消分配内存

sub my_function()
     Dim a() as string
     redim a(1 to 15)
     'some for loop  goes here aroung 50 iterations
     'some piece of code goes here may be 40 lines
     erase a 'deallocate the memory
end sub

问题

方法I 擦除a,是否会消耗掉任何巨大的周期?或者更多字节的ram?或者我应该等待子例程的结束,还是应该使用擦除语句

方法II 子例程中没有擦除语句,该函数在子例程结束时杀死数组但是我不需要数组直到函数结束,所以这个足够快或者优化

方法III 在第一次观看时,人们说在子程序结束时将其解雇是一件愚蠢的事情,因为它本身会在最后杀死,但我很想知道谢谢

1 个答案:

答案 0 :(得分:3)

答案在某种程度上取决于所使用的语言以及使用的内存大小。 对于所有情况中99.99%的VBA,我可以想象解除分配数组内存没有性能提升,而且可能稍微慢一些。 在VBA中极少数情况下值得明确销毁对象。

对于不自动处理内存释放的C / C ++等语言,显式编程内存释放非常重要,这样您的代码就不会包含内存泄漏。