再谈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. 效率低下的Split函数,用VBS的人你伤不起
  2. VBS脚本中Sleep方法的最大延迟时间
  3. 用EditPlus+BCC5.5搭建C语言学习环境
  4. Ubuntu查看系统运行时间
  5. 用LinuxLive USB Creator创建Linux启动盘

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

  1. WebAdmin说道:

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

  2. nk778878说道:

    请问怎么声明?

  3. nk7788说道:

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

留下回复