我正在编写一个批处理脚本,它会遍历目录中的每个文件,查找代码文件并以某种方式修改它们。完成该任务后,我尝试在包含大约 6,000 个文件的大目录上运行它。大约 40 分钟的脚本崩溃了,我从命令提示符处收到了很多内存不足的错误,运行脚本的同时查看任务管理器显示我的程序以每次循环迭代大约 1MB 的速度消耗内存。因此,很自然地认为我做错了什么,我删除了我为隔离问题而编写的所有代码。但后来我留下了一个空文件,除了一个 for 循环,问题仍然存在!
这是我在一个相当大的目录上运行的,就像我说的:
@echo off
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set directory=%CD%
for /R "%directory%" %%a in (*.c *.cpp *.h *.idl) do (
set currentDir=%%~dpa
pushd !currentDir!
popd
)
我实际上已经能够将其缩减为:
@echo off
for /R "%CD%" %%a in (*) do echo
而且问题仍然存在。
批处理 for 循环中是否存在内存泄漏,或者我只是做错了什么?
我正在运行 Windows XP 32 位 Service Pack 2,尽管我已经测试并确认 Service Pack 3 中仍然存在问题。
这与其说是一个答案,不如说是一种解决方法(或重写)。我已经运行了您的脚本,并且看到了一些内存消耗,其中一些在脚本完成之前不会释放,但每次迭代我都没有获得接近 1 MB 的内存。 (就像 @aphoria 一样,我可以在 c: 根目录下运行该脚本,在 XP SP3 和 Vista 上没有问题。)
我建议您关闭该脚本不需要的任何进程,并一次在一个子目录上运行脚本。
如果您无法通过任何其他方式解决此问题,我建议您尝试在 Powershell 中编写脚本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)