unload:释放窗体句柄 set ... = Nothing:释放对象如果你在窗体上没有正确释放某些资源,那么就达不到完全释放的目的。
怎么给每个都写上每个窗体都写上set nothing
内存使用是先按一定的块大小分配给程序的堆栈,然后在堆栈上在进行变量(包括对象)的分配,所以少数小对象的分配/释放是不影响内存使用数的(堆栈的总容量不变)。 下面的代码可以影响到内存使用数: Option Explicit Dim a() As VariantPrivate Sub Command1_Click() ReDim a(&H10000 - 1) End SubPrivate Sub Command2_Click() Erase a End Sub
unload窗体后,加上一句:End 就搞定了
当窗体结束后 加个"END" '这样会释放所有在这个窗体中出现的对象. set obj=nothing '释放对象占用的内存地址 unload obj '我不知道这会不会释放对象占用的内存地址?但我可能肯定的是有时候,在一些特定的场合,窗体会无故停留在进程内,但我能确定窗体内的事件代码都已完全执行完毕!?后来没办法只有用END
用 END 进行释放是 Visual Basic 中最最误人子弟的。 最早的 Basic 程序运行于 DOS 之类的单任务操作系统上,END 语句等于结束程序退回到操作系统。 在 DOS 下,所有外部资源都通过中断进行访问,根本不存在缓冲区或句柄控制,只要没有进行中断挂钩,程序结束就等于完整地释放了。 因此在某些“专假”地教授下,END就成了万能法宝了。外部环境不同了,要避免用 END。 如果仅仅是数据库事务未结束,那么用 END 最多是本次事务被回滚。但是如果正在进行文件操作,END 可能会导致文件数据不一致导致无法使用。 程序不能结束,只能是程序编得不好。
set ... = Nothing:释放对象如果你在窗体上没有正确释放某些资源,那么就达不到完全释放的目的。
下面的代码可以影响到内存使用数:
Option Explicit
Dim a() As VariantPrivate Sub Command1_Click()
ReDim a(&H10000 - 1)
End SubPrivate Sub Command2_Click()
Erase a
End Sub
加个"END" '这样会释放所有在这个窗体中出现的对象.
set obj=nothing '释放对象占用的内存地址
unload obj '我不知道这会不会释放对象占用的内存地址?但我可能肯定的是有时候,在一些特定的场合,窗体会无故停留在进程内,但我能确定窗体内的事件代码都已完全执行完毕!?后来没办法只有用END
最早的 Basic 程序运行于 DOS 之类的单任务操作系统上,END 语句等于结束程序退回到操作系统。
在 DOS 下,所有外部资源都通过中断进行访问,根本不存在缓冲区或句柄控制,只要没有进行中断挂钩,程序结束就等于完整地释放了。
因此在某些“专假”地教授下,END就成了万能法宝了。外部环境不同了,要避免用 END。
如果仅仅是数据库事务未结束,那么用 END 最多是本次事务被回滚。但是如果正在进行文件操作,END 可能会导致文件数据不一致导致无法使用。
程序不能结束,只能是程序编得不好。