内存泄漏似乎是由VBS程序引起的

时间:2017-10-04 06:16:18

标签: sql-server windows vbscript windows-server-2012-r2 windows-server

似乎我们的一个VBS程序导致内存泄漏。有人可以给我任何建议以避免它吗?

我在Server-A中有一个VBS程序。 VBS程序的第一部分只从Server-B(SQL Server)中选择一条记录,并决定它是执行以下代码还是按记录的一列值退出。它由Server-A的计划任务执行,每隔一分钟运行一次。

虽然程序每隔一分钟监视一次表,但它在大多数时间检查表值后立即退出,并且每月只进行一次或两次以下过程。但是,如附图所示,Server-A的可用内存量急剧减少。

以下功能是在VBS程序的第一部分调用的功能。如果返回码为0,则退出。

如果有人给我们任何建议,我将不胜感激。

图片:免费内存使用(绿色=免费内存)(8月12日 - 8月27日) enter image description here

Dim DestDWHServer
(*snip*)

Call Main

'**************************************
    Main  
'**************************************
Sub Main

    'Get the name of the DBserver (DEV/QA/PROD)
    Call subSetDestDWHServer 

    'Check the order from the user
    if fncCTLCheck_Update() = 0 then Exit Sub

    (*snip*)

End Sub

'**************************************
    Check the Order from Users 
'**************************************
Function fncCTLCheck_Update()

    dim ret,flgOrder,cn,sSQLSelect,sSQLUpdate,sSvr,sDB,sCn,cmd,rs
    '
    ret = 0
    '
    Set cn = CreateObject("ADODB.Connection")
    sSvr = DestDWHServer
    sDB = "DB_A"
    '
    sCn = "XXXXXXXXXXX" 'ConnectionString
    cn.ConnectionString = sCn
    cn.Open
    '
    sSQLSelect= "SELECT [FLG_ORDER], [STATUS_T] FROM [DB_A].[dbo].
    [T_CTL_TASK] WHERE [TASK_ID] = 1"
    '
    Set cmd = CreateObject("ADODB.Command")
    cmd.ActiveConnection = cn
    cmd.CommandText = sSQLSelect
    '
    Set rs = CreateObject("ADODB.Recordset")
    rs.Open cmd
    flgOrder = rs.Fields("FLG_ORDER").Value
    '
    rs.Close
    '
    If flgOrder = 0 then
        ret = 0
    Else    
        ret = 1
        sSQLUpdate = "UPDATE [DB_A].[dbo].[T_CTL_TASK] set [FLG_ORDER]=0, 
    [STATUS_T]=1, [LAST_START_DTM] = getdate() WHERE [TASK_ID] = 1"
        cmd.CommandText = sSQLUpdate 
        cmd.Execute
    End If
    cn.Close
    set cmd = nothing
    set cn = nothing
    '
    fncCTLCheck_Update = ret
    '
End Function

'**************************************
    Get the server name 
'**************************************
Sub subSetDestDWHServer
    Dim obj
    Dim HostName
    Set obj = CreateObject("WScript.Network")

    HostName=obj.ComputerName
    Set obj = Nothing

    select case HostName
        case "ServerA_DEV"
            DestDWHServer = "ServerB_DEV"
        case "ServerA_QA"
            DestDWHServer = "ServerB_QA"
        case "ServerA_PROD"
            DestDWHServer = "ServerB_PROD"
    End Select
End Sub

0 个答案:

没有答案