小弟最近写了一个程序,结果第一遍运行较快,后来是越来越慢,后来小弟写了一个简单的程序在VB中进行测试,程序中实现的大概功能是从文件中读取内容并显示在窗体的控件中;程序中没有用到Public型变量,在局部变量中使用了一些对象型的变量,但在结束程序时全部设为了Nothing,然后测试结果如下运行时环境 vb6.exe在任务管理器中的内存占用情况
刚打开工程还没有运行 13.6M
在VB中第一次运行程序,运行完成后,关闭程序 130M
在VB中第二次运行程序,运行完成后,关闭程序 240M
在VB中第三次运行程序,运行完成后,关闭程序 280M上面的数据得出的结果是程序运行的次数越多,vb6.exe在任务管理器中占用的内存越大,可小弟想不通的是我已经关闭了程序而且程序中没有全局变量,对象变量又全设为了Nothing,退出时文件也全部关闭。为什么vb6.exe的内存还是越来越大,按常理说全局变量和局部变量的生命周期在程序结束运行时已经结束,到底是什么占用了这些内存?vb中有没有类似java的内存回收的机制?有没有朋友遇到过类似情况,小弟向大家请教
刚打开工程还没有运行 13.6M
在VB中第一次运行程序,运行完成后,关闭程序 130M
在VB中第二次运行程序,运行完成后,关闭程序 240M
在VB中第三次运行程序,运行完成后,关闭程序 280M上面的数据得出的结果是程序运行的次数越多,vb6.exe在任务管理器中占用的内存越大,可小弟想不通的是我已经关闭了程序而且程序中没有全局变量,对象变量又全设为了Nothing,退出时文件也全部关闭。为什么vb6.exe的内存还是越来越大,按常理说全局变量和局部变量的生命周期在程序结束运行时已经结束,到底是什么占用了这些内存?vb中有没有类似java的内存回收的机制?有没有朋友遇到过类似情况,小弟向大家请教
还是没有完全释放吧,只是想不通为什么会占那么多比如
dim rs1 as Recordset,rs2 as Recordset
set rs1 = new Recordset
rs1.open sql,conn
……'在其他地方
set rs2 = rs1……
set rs1 = nothing
这样并没有释放这个记录集,因为还有rs2在引用它例如 redim的动态数组,
必须用erase语句来释放等等
上面这个语句是在循环中使用的。如下所示:
while not eof(1) '1是打开的文件号
...
set fnewFeature=Map1.FeatureFactory.CreateRegion(Mulipt, AreaStyle)
...使用fnewFeature
set fnewfeature=Nothing
...
loop
小弟在每次使用fnewFeature结束后,都及时地把fnewfeature设置为Nothing,可还是不起作用。
有没有fnewFeature.close、fnewFeature.free之类的方法呢?