2011-06-13 2 views
8

코드 파일을 찾는 디렉토리의 모든 파일을 거쳐 어떤 방식 으로든 수정하는 배치 스크립트를 작성하고 있습니다. 이 작업을 마친 후에는 약 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 

그리고 문제가 계속 지속 여기

내가 말했듯이 나는 상당히 큰 디렉토리에서 실행 된 것입니다.

일괄 처리 루프에 메모리 누수가 있습니까? 아니면 잘못된 것입니까?

는 내가 테스트하고 문제가 계속이 너무 많이 해결 방법으로 답변하지 않습니다 서비스 팩 3

+0

pushd 명령 바로 다음에 popd 란 무엇입니까? 그건 나에게 의미가 없다. 당신은 그것으로부터 아무것도하지 않을 것입니다. (단지 2 개의 디렉토리 사이를왔다 갔다합니다). – steenhulthin

+0

나는 실제 코드가하는 것을 모방하고있다. 전체 파일에는 푸시와 팝 사이에 많은 것들이 있습니다. – Maynza

+0

좋아요, 추가해야한다고 생각합니다 ... 코드가 표시되지 않은 곳입니다. – steenhulthin

답변

2

에 존재 확인하고 있지만 윈도우 XP 32 비트 서비스 팩 2를 실행 (또는 재 작성)하고있다. 나는 당신의 스크립트를 돌렸고 약간의 메모리 소비를 보았는데, 그 중 일부는 스크립트가 끝날 때까지 출시되지 않았지만, 반복 당 1MB 근처에는 아무것도 얻지 못했다. (@aphoria와 마찬가지로 XP SP3 및 Vista에서 c :의 루트에있는 스크립트를 실행할 수 있습니다.)

스크립트에 필요하지 않은 프로세스를 닫고 스크립트를 하나의 하위 디렉토리에서 실행할 것을 제안합니다. 시각.

다른 방법으로는이 문제를 해결할 수 없다면 PowerShell에서 스크립트를 작성하는 것이 좋습니다.

+1

이것은 본질적으로 우리가하는 일입니다. – Maynza

1

문제는 CMD.EXE 및 손상시킬 특정 메모리 사용량을 별도로 설정한다는 사실에 있습니다. 일반적으로 배치 파일을 사용하여 많은 처리 작업을 수행 할 때 스크립트에서 사용할 수있는 메모리 작업량을 늘리고 싶습니다.

실행중인 OS 환경에 따라 다음을 수행 할 수 있습니다

WINDOWS NT/2000/XP : 당신은 예를 들어, 에/e 스위치를 COMMAND.COM 환경 메모리를 변경할 수 있습니다 :

command.com /e:2048 /c BatchFile.BAT 

이 2048 바이트 환경 메모리 쉘에 BatchFile.BAT를 실행합니다. WINDOWS 95/98


은/ME를 : 당신은 특정 MS-DOS 창에서 또는 특정 배치 파일에 바로 가기에 할당 된 환경 메모리를 변경할 수 있습니다. 속성 대화 상자 을 엽니 다 (바로 가기 또는 바탕 화면 아이콘을 마우스 오른쪽 단추로 클릭하고 속성 클릭). 메모리 탭을 클릭하십시오.초기 환경 풀다운 상자를 사용하여 변수에 충분한 크기 인 을 설정하십시오. 은 2048 바이트 (원하는 경우 이상)로 설정하십시오.

안전하게 사용하려면 디스크 메모리 사용량을 늘려야합니다.

관련 문제