如何看我的对象实例化后,在关闭窗体体没有释放。通过看任务管理器中的句柄可以吗?
还是看别的地方。反正内存占用在一直增加。我就是不知问题出在哪里。
我写的程序运行几次后,内存增加,如何知道是不是对象没有释放呢?
我写的是一个c/s程序,后台是sqlserver2000,前台用的是vb,关键是我如何知道我的程序是不是有内存泄露,因为运行几次后,内存就要大增. 我不知如何查,是不是我没有将对象释放,可是如何看呢?
我看任务管理器中进程中的内存数大增.但是如何看是不是对象没有释放呢?是不是看句柄数呀,
看句柄数意义大吗?
在我的程序窗体中用到了ado记录集对象。连接对象,还是自定义的一个数据库操作类对象。(这个类就是对ado一些对象的封装)
内存增加应该是我程序的问题,我现在的目的是找到问题出在哪,但是我不知道是不是由于我的对象没有正常释放造成内存泄露造成的.请大家指教.
还是看别的地方。反正内存占用在一直增加。我就是不知问题出在哪里。
我写的程序运行几次后,内存增加,如何知道是不是对象没有释放呢?
我写的是一个c/s程序,后台是sqlserver2000,前台用的是vb,关键是我如何知道我的程序是不是有内存泄露,因为运行几次后,内存就要大增. 我不知如何查,是不是我没有将对象释放,可是如何看呢?
我看任务管理器中进程中的内存数大增.但是如何看是不是对象没有释放呢?是不是看句柄数呀,
看句柄数意义大吗?
在我的程序窗体中用到了ado记录集对象。连接对象,还是自定义的一个数据库操作类对象。(这个类就是对ado一些对象的封装)
内存增加应该是我程序的问题,我现在的目的是找到问题出在哪,但是我不知道是不是由于我的对象没有正常释放造成内存泄露造成的.请大家指教.
解决方案 »
- where语句的有关问题 求指导~~~~~~~
- 如何获取到QQ2009的聊天窗口?
- 鼠标move
- 请教关于转化日期格式的问题
- zyg0(影子(努力吃饭中)) 进来领分 (1)
- 在VB中如何根据域名解析动态IP地址?
- 对 --wxg4988(王国新)或其他高手 ,请高手您把用vb程序保存图片到SQL Server并从sql server中读取的代码给我好吗?
- 谁知道VB中如何调用ORACLE数据库的序列?
- 谁知道那里有下载VB6.0的?
- 我用winsock模拟telnet连接sun服务器,查winsock状态,显示已连接,但却不出login提示符,而是几个问号,谁能给解释一下
- 请教一个思路,我想把窗体中用到的所有api函数全放在一个标准模块
- 如何控制窗体仅允许出现垂直滚动条
如果你使用了API,则按照你在其他语言使用的方式处理。
如果用了太多的控件,数据结构,注意把不用的释放,不释放也不会泄露,只要你保证软件退出时执行到 end 语句。
debug.print "your object is still alive"
End If
比如:
== Parent.cls ==
Option Explicit
Private m_Children As CollectionSub Add(ByVal c As Child)
m_Children.Add c, c.Name
Set c.Parent = Me
End SubPrivate Sub Class_Initialize()
Set m_Children = New Collection
End Sub== Child.cls ==
Public Name As String
Public Parent As Parent== Form1.frm ==
Private Sub Form_Load()
Timer1.Interval = 1
End SubPrivate Sub Timer1_Timer()
Dim p As Parent
Dim c As Child
Set p = New Parent
Set c = New Child
c.Name = "A"
p.Add c
End Sub运行该程序就会在任务管理器中发现内存不停增长。原因是 VB 中的对象均遵循 COM 的 IUnknow 接口,对象引用一次引用计数加一、对象释放一次引用计数减一,如果引用计数为零就自动释放对象。
例子中的 Parent 对象:
Set p = New Parent 引用计数加一(值 1)
在 p.Add c 中调用 Set c.Parent = Me 引用计数加一(值 2)
过程 Timer1_Timer 结束会有一个自动的 set p = nothing 而引用计数减一(值 1)
最终应为引用计数非零而没有释放 Parent 对象。
例子中的 Child 对象同理可得。向这种对象 p 和 c 由于互相引用而导致内存泄漏的问题属于最常见的循环引用的问题,要解决也很简单:
在 Parent 中添加 Clear 方法,将 Child.Parent 设为 Nothing 并从 m_Children 中清除;
调用 Parent 结束时(Set p = nothing 前)先调用 Clear 方法。