小弟最近写了一个程序,结果第一遍运行较快,后来是越来越慢,后来小弟写了一个简单的程序在VB中进行测试,程序中实现的大概功能是从文件中读取内容并显示在窗体的控件中;程序中没有用到Public型变量,在局部变量中使用了一些对象型的变量,但在结束程序时全部设为了Nothing,然后测试结果如下运行时环境                                     vb6.exe在任务管理器中的内存占用情况
刚打开工程还没有运行                           13.6M
在VB中第一次运行程序,运行完成后,关闭程序      130M
在VB中第二次运行程序,运行完成后,关闭程序      240M
在VB中第三次运行程序,运行完成后,关闭程序      280M上面的数据得出的结果是程序运行的次数越多,vb6.exe在任务管理器中占用的内存越大,可小弟想不通的是我已经关闭了程序而且程序中没有全局变量,对象变量又全设为了Nothing,退出时文件也全部关闭。为什么vb6.exe的内存还是越来越大,按常理说全局变量和局部变量的生命周期在程序结束运行时已经结束,到底是什么占用了这些内存?vb中有没有类似java的内存回收的机制?有没有朋友遇到过类似情况,小弟向大家请教

解决方案 »

  1.   

    VB6的内存回收机制是有的,不过个人感觉不稳定。。一般当我遇到你这样的情况时,我会在程序退出时加一句“End”。。
      

  2.   

    内存泄漏!
    还是没有完全释放吧,只是想不通为什么会占那么多比如
    dim rs1 as Recordset,rs2 as Recordset
    set rs1 = new Recordset
    rs1.open sql,conn
    ……'在其他地方
    set rs2 = rs1……
    set rs1 = nothing
    这样并没有释放这个记录集,因为还有rs2在引用它例如 redim的动态数组,
    必须用erase语句来释放等等
      

  3.   

    我没有使用数组,而且在程序并没有出现对对象变量之间赋值的情况如set rs2 = rs1的情况,但会频繁对某一个对象变量使用set fnewFeature=Map1.FeatureFactory.CreateRegion(Mulipt, AreaStyle)
    上面这个语句是在循环中使用的。如下所示:
    while not eof(1)    '1是打开的文件号
       ...
       set fnewFeature=Map1.FeatureFactory.CreateRegion(Mulipt, AreaStyle)
       ...使用fnewFeature
       set fnewfeature=Nothing
       ...
    loop
    小弟在每次使用fnewFeature结束后,都及时地把fnewfeature设置为Nothing,可还是不起作用。
      

  4.   

    不知道Map1是什么,但我想可能是这个Map1的问题
    有没有fnewFeature.close、fnewFeature.free之类的方法呢?
      

  5.   

    map1是一个对象。fnewFeature也是一个对象,fnewFeature没有close、free等方法,只有set fnewFeature =Nothing。我总觉得set fnewFeature =Nothing好像没起作用,