【发布时间】:2011-06-13 12:40:08
【问题描述】:
我正在编写一个批处理脚本,它遍历目录中的每个文件以查找代码文件并以某种方式修改它们。完成该任务后,我尝试在一个包含大约 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 中仍然存在该问题。
【问题讨论】:
-
pushd 命令之后的 popd 是什么意思?这对我来说没有意义。您将一事无成(只是在 2 个目录之间来回切换)。
-
我正在模拟我的实际代码的作用。在完整的文件中,push 和 pop 之间有很多东西。
-
好的,我认为你应该在没有显示代码的地方添加...。
-
哦,我误读了你问题的那一部分。你把它拿出来了。
-
我只是试图将代码简化为仍然存在泄漏的最小块。如果您愿意,可以添加 echo !currentDir!在推送和弹出之间。
标签: memory memory-leaks batch-file for-loop