批量循环中的内存泄漏?

May*_*nza 8 memory memory-leaks for-loop batch-file

我正在编写一个批处理脚本,它遍历目录中的每个文件,查找代码文件并以某种方式修改它们.完成该任务后,我尝试在大约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
)
Run Code Online (Sandbox Code Playgroud)

我实际上已经把它修剪成:

@echo off
for /R "%CD%" %%a in (*) do echo
Run Code Online (Sandbox Code Playgroud)

问题仍然存在.

批处理循环中是否存在内存泄漏,或者我只是做错了什么?

我正在运行Windows XP 32位Service Pack 2,虽然我已经测试并确认问题仍然存在于Service Pack 3中.

ste*_*hin 3

这与其说是一个答案,不如说是一种解决方法(或重写)。我已经运行了您的脚本,并且看到了一些内存消耗,其中一些在脚本完成之前不会释放,但每次迭代我都没有获得接近 1 MB 的内存。(就像 @aphoria 一样,我可以在 c: 根目录下运行该脚本,在 XP SP3 和 Vista 上没有问题。)

我建议您关闭脚本不需要的所有进程,并一次在一个子目录上运行脚本。

如果您无法通过任何其他方式解决此问题,我建议您尝试在 Powershell 中编写脚本。