捕捉网站内存泄露

问题描述:

我设法创建一些简单的脚本来捕捉新闻表单网站,但问题是内存泄漏。似乎脚本不释放内存:( 我试着关闭,空(无不是空不帮助) - 检查结束行。捕捉网站内存泄露

Do While x<50000 
    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.3.0") 
    WScript.Sleep 60000 
    oXMLHTTP.Open "GET", "http://www.news.com/sport", False 
    WScript.Sleep 900 
    oXMLHTTP.Send 

    If oXMLHTTP.Status = 200 Then 
    Set html = CreateObject("HTMLfile") 
    html.write oXMLHTTP.responseText 
    ...some code... 

    html=Empty 
    oXMLHTTP=Empty 
    oXMLHTTP.responseText=Empty 
    oXMLHTTP.close 
    oStream.close 
    oStream=Empty 
Loop 

  1. 您需要Set x = Nothing释放对象x
  2. 你不能访问你之前(oXMLHTTP)

在接下来的脚本桩解除对象的成员:

  • oXMLHTTP变量声明为global并定义一次用于整个脚本;
  • htmloStream变量是本地的DoSomething程序和被释放出来的...

然而,一些语句留不清楚我...

Option Explicit 
Dim x, oXMLHTTP 
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.3.0") 
Do While x<50000 
    WScript.Sleep 60000 
    oXMLHTTP.Open "GET", "http://www.news.com/sport", False 
    WScript.Sleep 900 
    oXMLHTTP.Send 
    DoSomething 
    oXMLHTTP.close 
Loop 

Sub DoSomething 
    Dim html, oStream 
    If oXMLHTTP.Status = 200 Then 
    Set html = CreateObject("HTMLfile") 
    html.write oXMLHTTP.responseText 
    '...some code... 
    End If 
    '...another code... 
End Sub 

Local Variables in Sub Procedures

Sub过程中局部变量的值不会在调用之间保留 到程序。

过程中显式声明的变量(使用Dim或 等效项)始终是过程本地的。 在过程中使用但未明确声明的变量也是本地变量,除非 它们在 过程之外的某个更高级别上显式声明。

如果在过程中没有明确声明变量,那么如果在脚本级别 上定义的任何内容具有重复的名称,则会发生命名 冲突。如果您的程序引用了一个未声明的 变量,该变量与另一个程序,常量或 变量具有相同的名称,则假定您的程序指向的是该脚本级名称的 名称。为避免这种冲突,请使用Option Explicit声明强制显式声明变量。

Scope and Lifetime of Variables

变量的作用域是,你声明它决定。当您在过程中声明变量时,只有该过程 中的代码才能访问或更改该变量的值。它具有本地范围 ,并且是一个过程级变量。如果您在 过程之外声明了变量,则可以使其在 脚本中的所有过程都能识别该变量。这是一个脚本级变量,它具有脚本级别 范围。

变量的生命周期取决于它存在多长时间。脚本级变量的生命周期 从声明的时间延长到脚本完成运行的时间 。在过程级别,只有在过程中,才会存在 变量。当 过程退出时,该变量被销毁。在执行过程时,局部变量是理想的 作为临时存储空间。您可以在几个不同的过程 中拥有 相同名称的局部变量,因为每个过程仅通过声明的 的过程来识别。