再谈Msxml2.XMLHTTP、Msxml2.ServerXMLHTTP与缓存

标签: , , , , ,

上次写过一篇《Msxml2.XMLHTTP Msxml2.ServerXMLHTTP与缓存》,里面说 Msxml2.XMLHTTP 是有缓存的,而 Msxml2.ServerXMLHTTP 是没有缓存的。但是最近写 VBS 脚本的时候发现,这并不正确。

最近写过几个暴力破解网站账号的 VBS 程序,测试的时候很郁闷的发现 Msxml2.ServerXMLHTTP 有时有缓存,有时却没有缓存,百思不得其解。一位QQ 昵称为“乱码”的网友提醒了我:“我是这么想的,如果当然成功了,先释放这个对象 set ohttp=nothing,这样不就连缓存也没了,然后再创建,不知可行否。”

我才发现,在有的程序中储存 Msxml2.ServerXMLHTTP 对象的变量是声明在函数内部的,这样函数结束时这个变量会被释放,于是这时“没有缓存”;而在有的程序中我为了提高效率,将储存 Msxml2.ServerXMLHTTP 对象的变量声明为全局变量,这样可以节省不断创建 Msxml2.ServerXMLHTTP 对象的时间和开销,导致这个对象一直都不会被释放,于是这时就“有缓存”了。

Msxml2.XMLHTTP 和 Msxml2.ServerXMLHTTP 的缓存问题已经困扰我很久了,现在终于豁然开朗:这两个对象都是有缓存的,每一个对象被创建后都在内部维护着自己的缓存,直到被释放。所以,如果你需要缓存时,就把它们声明为全局变量;如果你不需要缓存,就声明为局部变量以自动释放内存,或者自己手动释放。

赞赏

微信赞赏支付宝赞赏

随机文章:

  1. WordPress判断用户是否登录
  2. 用bbPress搭建了一个VBS论坛
  3. TCC,很小很强大
  4. VBS脚本设置虚拟内存大小和位置
  5. PHP没有ASP流行?

3 条评论 发表在“再谈Msxml2.XMLHTTP、Msxml2.ServerXMLHTTP与缓存”上

  1. WebAdmin说道:

    我试着定义全局还是不行啊。请求指导

  2. nk778878说道:

    请问怎么声明?

  3. nk7788说道:

    请问ServerXMLHTTP有办法像xmlhttp登陆一次后,缓存就一直保持存在吗?

留下回复