捕捉网站内存泄露
问题描述:
我设法创建一些简单的脚本来捕捉新闻表单网站,但问题是内存泄漏。似乎脚本不释放内存:( 我试着关闭,空(无不是空不帮助) - 检查结束行。捕捉网站内存泄露
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
答
- 您需要
Set x = Nothing
释放对象x
- 你不能访问你之前(oXMLHTTP)
答
在接下来的脚本桩解除对象的成员:
-
oXMLHTTP
变量声明为global并定义一次用于整个脚本; -
html
和oStream
变量是本地的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
变量的作用域是,你声明它决定。当您在过程中声明变量时,只有该过程 中的代码才能访问或更改该变量的值。它具有本地范围 ,并且是一个过程级变量。如果您在 过程之外声明了变量,则可以使其在 脚本中的所有过程都能识别该变量。这是一个脚本级变量,它具有脚本级别 范围。
变量的生命周期取决于它存在多长时间。脚本级变量的生命周期 从声明的时间延长到脚本完成运行的时间 。在过程级别,只有在过程中,才会存在 变量。当 过程退出时,该变量被销毁。在执行过程时,局部变量是理想的 作为临时存储空间。您可以在几个不同的过程 中拥有 相同名称的局部变量,因为每个过程仅通过声明的 的过程来识别。