我在编辑调试程序不久,就发现内存不足,我知道这是程序中有些对象没有被释放?但是又不知道是那些没有释放?
请问一下,如何找出那些没有被释放的对象?vb有没有相应的列表?在堆栈中能找到用类模块\dll创建的对象吗?
释放对象有好的方法吗?谢谢

解决方案 »

  1.   

    假设a是你需要判断的对象
    If Not a Is Nothing Then
        Debug.Print "对象存在"
    Else
        Debug.Print "对象不存在"
    End If释放对象
    set a=nothing
      

  2.   

    为了判断所有的对象,你需要在实例化对象时,将对象加入一个集合,在需要判断时,逐一从集合中取出元素,进行判断,当然最后不要忘记释放集合所占的资源不过这些,都无关紧要,重要的是用完一个对象就要及时释放它,对于某些对象只是
    set 对象=nothing还是不够的,还必须在使用完毕后,关闭它,如ie对象、word对象等等
      

  3.   

    我设置a=nothing 后,发现a对象仍然存在?
      

  4.   

    if obj is nothing then
        msgbox "对象已经释放"
    end if
      

  5.   

    vb6中有个函数TypeName
       if TypeName(a)="nothing" then
              msgbox "对象已经释放"
       end if         
      

  6.   

    但愿 IS Nothing 可以帮你
    你是不是用第三方控件了?
      

  7.   

    释放对像时用set 对象=nothing,然后关闭一些打开的对象,程序结束时用End。
      

  8.   

    只是用了Hive.dll(据说比集合快)替代Collection,
    不过真的很怪阿,所有AS NEW 对象 都SET =NOTHING 后发现对象仍然存在?
    我用的是WIN98
      

  9.   

    我另外创建一个窗体
    加入类模块 cFrame.cls (里面只是有个b as long )
    居然也无法释放对象a,谁能告诉我错在哪里?
    form1.frm:Option Explicit
    Public A As New cFramePrivate Sub Form_Unload(Cancel As Integer)
      Set A = Nothing
      If A Is Nothing Then
        MsgBox "对象已经释放"  
      End If
      'A 对象仍然存在 Objptr(a)>0??????????
    End SubcFrame.cls:private b as long
      

  10.   

    在每次使用对象后,用set object=nothing释放
      

  11.   

    大哥,看看上面的代码,解释一下
    用了set object=nothing,对象还存在的原因,注意该对象没有被其他的引用
    是不是vb出问题了?