标题: 再谈Msxml2.XMLHTTP、Msxml2.ServerXMLHTTP与缓存
作者: Demon
链接: https://demon.tw/programming/msxml2-xmlhttp-msxml2-serverxmlhttp-cache-again.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
上次写过一篇《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 的缓存问题已经困扰我很久了,现在终于豁然开朗:这两个对象都是有缓存的,每一个对象被创建后都在内部维护着自己的缓存,直到被释放。所以,如果你需要缓存时,就把它们声明为全局变量;如果你不需要缓存,就声明为局部变量以自动释放内存,或者自己手动释放。
赞赏微信赞赏支付宝赞赏
随机文章:
我试着定义全局还是不行啊。请求指导
请问怎么声明?
请问ServerXMLHTTP有办法像xmlhttp登陆一次后,缓存就一直保持存在吗?