捕获网站

时间:2015-07-03 09:14:33

标签: memory-leaks vbscript

我设法创建一些简单的脚本来捕获新闻形式的网站,但问题在于内存泄漏。似乎脚本没有释放内存:( 我试图关闭,空(没有任何反而空无所事事) - 检查终点线。

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

2 个答案:

答案 0 :(得分:2)

  1. 您需要Set x = Nothing才能发布对象x
  2. 您不得访问之前发布的对象(oXMLHTTP)
  3. 的成员

答案 1 :(得分:1)

在下一个脚本存根中:

  • 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

  

变量的范围由您声明它的位置决定。当你   在过程中声明一个变量,只在该过程中声明代码   可以访问或更改该变量的值。它有本地范围   并且是一个过程级变量。如果在a之外声明一个变量   程序,你可以识别你的所有程序   脚本。这是一个脚本级变量,它具有脚本级别   范围。

     

变量的生命周期取决于它存在多长时间。一生   脚本级变量的范围从声明的时间延伸到   脚本运行完毕的时间。在程序层面,a   只要您在过程中,变量就存在。当。。。的时候   过程退出,变量被破坏。局部变量是理想的   作为过程执行时的临时存储空间。你可以有   几个不同程序中同名的局部变量   因为每个人只能通过它的程序来识别   声明。