这可能不是一个典型的问题,因为它是关于Javascript的,它必须在使用旧IE引擎的Windows 7 Widget引擎下运行(不记得有多老了)。 我想做的是从硬盘中列出一些文件。一切正常,但这只是我的问题的示例。
正如您在代码中看到的那样,我正在创建ActiveXObject和Enumerator的实例。从理论上讲,在执行此函数后,应该销毁所有这些对象,因为应删除函数堆栈中保留的所有引用。但这似乎在这里不是很有效。
我为什么这么认为?因为此小部件在运行了数周而不重启的机器上工作,并且随着时间的推移,sidebar.exe进程占用了越来越多的内存(功能f_scanrec每隔几天运行一次,所以我确定不是其他事情在增长) ,我花了几个月的时间来弄清楚)。如果不运行此功能,sidebar.exe的内存大小将保持不变。
在Javascript中,我无法手动删除创建的对象。那么,我该怎么办,它在这里如何工作?
function f_scanrec(vS_path) {
var vO_scanfs = new ActiveXObject("Scripting.FileSystemObject");
var vO_dir = vO_scanfs.GetFolder(vS_path);
var vO_enum = false;
vO_enum = new Enumerator(vO_dir.SubFolders);
for (; !vO_enum.atEnd(); vO_enum.moveNext()) {
f_scanrec(vO_enum.item().Path);
}
vO_enum = new Enumerator(vO_dir.Files);
for (; !vO_enum.atEnd(); vO_enum.moveNext()) {
/* Do something with this enumerator, but no more recursion calls */
}
}
我将不胜感激,并感谢您提供任何有关此信息。