,这是模块里定义的函数
Public Function Open_rst_from_str(ByVal str As String) As ADODB.Recordset
On Error GoTo er:
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.CursorType = adOpenDynamic
    rs.LockType = adLockOptimistic
    rs.Open str, conn, , , adCmdText
    Set Open_rst_from_str = rs
    Set rs = Nothing
    Exit Function
er:
    Open App.Path & "\日志\日志.txt" For Append As #1
        Print #1, Now & " 查询出错 :" & err.Description & " sql: " & str
    Close #1
End Function'程序里调用
dim rs As ADODB.Recordset  '公共
strSql = "select ……"
Set rs = Open_rst_from_str(strSql)
……
rs.ClosestrSql = "select ……"
Set rs = Open_rst_from_str(strSql)
……
rs.Close不停的调用后内存就爆满了,我想问,
1如上我的代码怎么释放内存呢?
2哪个地方引起的内存没释放呢?
刚接触vb,望大虾能耐心讲解下,项目里非常非常频繁的使用那个函数,有时候1秒内便查询近10次以上,小程序安装在服务器的,长久下去服务器必死啊。。

解决方案 »

  1.   

    我查看任务管理器发现就是 sqlserver.exe 这个进程内存使用不断的在增加,我的程序退出后,它的值都还是和原来一样,不被释放 有没有人帮帮忙啊?
      

  2.   

    http://download.csdn.net/source/1498324
      

  3.   

    测试以下方式,看看如何:dim rs As ADODB.Recordset '公共
    strSql = "select ……"
    Set rs = Open_rst_from_str(strSql)
    ……
    rs.Close
    Set rs = NothingstrSql = "select ……"
    Set rs = Open_rst_from_str(strSql)
    ……
    rs.Close
    Set rs = Nothing
      

  4.   

    那是SQL SERVER的缓存,没关系。
      

  5.   

    多谢各位了,是sql server 缓存问题,因为一直连续使用sql查询,所以缓存很高,来不及释放,等过一段时间后自然就释放掉了特别感谢AisaC
      

  6.   


    on error goto er 能不能放在 rs.LockType = adLockOptimistic 的后面啊?(因为此前应该不会有错,如果有错最好再做一个 on error 处理段)
    这样,在 er: 后面就可以这样了,如:
    Public Function Open_rst_from_str(ByVal str As String) As ADODB.Recordset'......
        exit function
    er:
        If rs.State <> adStateClosed Then
            rs.Close
        End If
        set rs = nothing
        Open App.Path & "\日志\日志.txt" For Append As #1
        Print #1, Now & " 查询出错 :" & err.Description & " sql: " & str
        Close #1
    end function我认为,如果 rs.open 执行时出错,那么 rs 本身并没有置 nothing 且如果在连接没有关闭的情况下仍会占用内存;如果在 er: 里检查 rs.state,并做 rs.close ,那么在发生错误时也就没有连接了;注意:个人观点,仅供参考;