Estoy escribiendo un script por lotes que recorre todos los archivos de un directorio en busca de archivos de código y los modifica de alguna manera. Después de terminar esa tarea, traté de ejecutarlo en un gran directorio con aproximadamente 6.000 archivos. Alrededor de 40 minutos en el script se bloquearon y recibí muchos errores de memoria desde el símbolo del sistema, ejecutar el script mientras miraba el administrador de tareas mostró que mi programa estaba consumiendo memoria a una velocidad de 1 MB por iteración de bucle. Así que, naturalmente, pensando que había hecho algo mal recorté todo el código que había escrito para aislar el problema. Pero luego me quedé con un archivo vacío a excepción de un bucle for y ¡el problema aún persistía!¿Pérdida de memoria en lote para el bucle?
Esto es lo que me encontré en un directorio bastante grande como dije:
@echo off
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set directory=%CD%
for /R "%directory%" %%a in (*.c *.cpp *.h *.idl) do (
set currentDir=%%~dpa
pushd !currentDir!
popd
)
en realidad he sido capaz de recortar hacia abajo a:
@echo off
for /R "%CD%" %%a in (*) do echo
Y el problema aún persiste.
¿Hay una pérdida de memoria en el lote por bucle o simplemente estoy haciendo algo mal?
Estoy ejecutando Windows XP Service Pack 2 de 32 bits aunque he probado y confirmado el problema sigue presente en el Service Pack 3
¿Cuál es el punto emergente justo después del comando pushd? Eso no tiene sentido para mí. No logrará nada de eso (yendo y viniendo entre 2 directorios). – steenhulthin
Estoy emulando lo que hace mi código real. En el archivo completo hay muchas cosas entre el push y el pop. – Maynza
bien, creo que deberías agregar ... donde no se muestra el código. – steenhulthin