在JavaScript中,完成通过新ActiveXObject创建的对象后,是否需要将其设置为null?

| 在运行于WSH并创建对象的Javascript程序中,假设是Scripting.FileSystemObject或任何任意COM对象,完成后是否需要将变量设置为null?例如,我是否建议这样做:
var fso = new ActiveXObject(\"Scripting.FileSystemObject\");
var fileStream = fso.openTextFile(filename);
fso = null;  // recommended?  necessary? 
... use fileStream here ...
fileStream.Close();
fileStream = null;  // recommended? necessary?
效果是否与让var超出范围不同?     
已邀请:
将null分配给对象变量将减少引用计数器,以便内存管理系统可以尽快丢弃该资源。当变量超出范围时,参考计数器将自动减小。因此,几乎在所有情况下,手动进行都是浪费时间。 从理论上讲,如果在中间将A设置为null,则在第一部分使用大对象A并在第二部分使用另一个大对象B的函数可能会提高内存效率。但是由于这不会迫使彩信破坏A,因此该语句可能仍然是浪费。 如果您进行一些精美的类设计,则可能会得到循环引用。然后可能有必要用手绕圈-但是也许首先避免这种循环会更好。 有传言说古老的数据库访问对象带有错误,可以通过更改变量来避免。我不会基于这种伏都教来制定我的编程规则。 (Internet上有大量的VBscript代码充满\“ Set X = Nothing \”;当被问到时,作者倾向于谈论\'habit \'和其他语言(C,C ++))     
以Ekkehard.Horner所说的为基础... VBScript,JScript和ASP等脚本在为您管理内存的环境中执行。这样,将对象引用显式设置为Null或Empty并不一定会将其从内存中删除,至少不是立即将其删除。 (实际上,它通常几乎是瞬时的,但实际上,该任务已添加到环境中的队列中,该队列在稍后的某个时间点执行。)在这一点上,它的实用性远不如您可能使用认为。 在已编译的代码中,重要的是在程序(或某些情况下的代码段)结束之前清理内存,以便将所有分配的内存返回给系统。这样可以防止各种问题。在缓慢运行的代码之外,这在程序退出时最重要。在ASP或WSH之类的脚本环境中,内存管理会在脚本退出时自动进行清理。因此,即使您自己没有明确地将所有对象引用都设置为null,这也使得在这种情况下不需要整个混乱。 至于脚本执行过程中的内存问题,如果您要构建足够大的数组或字典对象以引起问题,则说明您已经超出了脚本的范围,或者在代码中采用了错误的方法。换句话说,这在VBScript中永远不会发生。实际上,为了防止这些问题,环境首先对数组和字典对象的大小施加了限制。     
如果您有运行时间较长的脚本,这些脚本在顶部/开始使用的对象在主要过程中是不需要的,则将这些对象设置为null可能会更快地释放内存,并且不会造成任何危害。正如其他海报所提到的,可能没有什么实际的好处。     

要回复问题请先登录注册