请问在VB中它自己能不能回收内存?

hongonline 2004-12-31 07:23:16
例如,如果我动态申请几个动态
private obj1 as MyClass
private obj2 as MyClass
'申请空间
set obj1=new MyClass
set obj2=new MyClass
.........
.......
'释放空间
set obj1=nothing
set obj2=nothing

请问有没有自己显式地释放空间?好象在现在所有的程序,都是没有人这样做的,不像C++


...全文
164 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiqi5521 2005-01-01
  • 打赏
  • 举报
回复
另外,数据库对象占用资源很大,及早的Set =nothing可以及时释放资源,不用等待VB去处理了。
qiqi5521 2005-01-01
  • 打赏
  • 举报
回复
对于数据库对象来说,由于对象间的关系复杂,系统要求严格按照一定的次序释放对象,否则会出问题。如果让VB自己处理,它就未必会按照正常的次序释放对象。所以就要用Set=nothing来显式控制了。
hongonline 2005-01-01
  • 打赏
  • 举报
回复
没关系,非常感谢你
qiqi5521 2005-01-01
  • 打赏
  • 举报
回复
实在抱歉,我对SQL接触较少。你可以到数据库板块提问,一定会有人答的。
hongonline 2005-01-01
  • 打赏
  • 举报
回复
请问在VB中间层中如果有一个事务
conn.begintransaction
(1)。。。。
(2)去执行SQL的事务
(3)。。。。
committransaction
在SQL中也有一事务
procedure
问题:
如果在SQL中的事务执行成功返回,
如果此时在VB的中间层中第(3)处回滚事务,在SQL中的事务是不是不能回滚,如果是应该怎么办?
谢谢
hongonline 2005-01-01
  • 打赏
  • 举报
回复
谢谢!
boyzhang 2004-12-31
  • 打赏
  • 举报
回复
GZ
hongonline 2004-12-31
  • 打赏
  • 举报
回复
那在VB的数据库里呢,就怎么很多人都有
conn.close
set conn=nothing
或者有些甚至
if not conn is nothing then
set conn=nothing
end if
这些也可以不要吗?
谢谢!
qiqi5521 2004-12-31
  • 打赏
  • 举报
回复
不是这样的,COM对象自释放的性质也有缺点,如果两个对象出现了循环引用,就会发生死锁,谁也得不到释放。

当然,在大多数情况下如你所说,只要new一下,以后什么就不管他了。
比如在一个过程中
private sub somesub()
dim obj as new MYClass

end sub

根本不需要Set obj=nothing
hongonline 2004-12-31
  • 打赏
  • 举报
回复
那就是在VB中只要new一下,以后什么就不管他了,这样就安全了是不是?谢谢
qiqi5521 2004-12-31
  • 打赏
  • 举报
回复
当一个对象变量超出它的范围的时候,会自动的撤销对COM对象实例的引用。COM对象具有自释放的性质,当一个COM对象实例的引用计数变为0时会自动的被销毁。所以你不必显式的调用set obj1=nothing
set obj2=nothing。

不要误解 set obj2=nothing 的意思,这句代码的意思可不是销毁COM对象,而是撤销obj2对COM对象的引用。这句代码可能导致COM对象被销毁,也可能不会导致COM对象被销毁(如果还有别的变量引用它)。

VB中的对象操作是完全自动化的,和C++中由程序员自己来回收内存有很大不同。
thirdapple 2004-12-31
  • 打赏
  • 举报
回复
我上次用VB写的一个程序莫名其妙的内存泄漏,大概运行1天就不行了

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧