2010-08-01 3 views
0

나는 msbuild 프로세스 중에 실행되는 powershell 스크립트를 가지고 있으며 로그 파일에서 정보를 추출하여 일부 내용의 유효성을 검사합니다. 스크립트가 2 xml 파일을로드 한 다음 로그 파일에서 추출한 데이터에서 유효성 검사를 수행합니다. 보통 스크립트는 평균 1 ~ 2 초가 걸립니다. xml 파일을로드하는 데는 약 800ms가 걸립니다. 스크립트는 10000 번 실행되기 때문에이 XML 파일을 매번로드하고 10000 * .8 초 = 8000 초의로드 시간 오버 헤드를 추가합니다.약 10000 번 powershell 스크립트를로드 중

이러한 XML 파일을 한 번로드 한 다음 스크립트에서 10000 번 사용하도록 할 수 있습니까? 긴급한 도움이 필요합니다.

+0

는 .NET의 XML 클래스를 사용하고 있습니까에

params([string]$docPath) $xdoc = [xml] (get-content $docPath) // do stuff w/ $xdoc 

변화 그것 같이 시작하는 PowerShell 스크립트를 Assumming? 빌드 프로세스가 인수를 사용하여 스크립트를 호출합니까? – fletcher

+0

예. 나는 XmlDocument를 사용하고있다. $ xml = [xml] (Get-Content $ filePath). 또한 스크립트는 xml 파일의 경로와 다른 args와 같은 6 개의 인수로 호출됩니다. – bassam

+0

빌드 프로세스에서 10.000 번 실행되는 스크립트? 왜 이것이 필요하다고 생각하는지 자세히 설명해주십시오. –

답변

1

상황에 따라 가능할지 모르겠지만 프로젝트에 10.000 개의 구성 요소가있는 경우 powershell 스크립트가 .csproj 파일에서 구성 요소 이름과 위치를 추출하여 루프를 반복 할 수 있습니다. XML 파일을 반복해서로드하는 시간을 절약 할뿐만 아니라 powershell 환경을 10000 번로드하는 시간도 절약 할 수 있습니다.

+0

매번 powershell 스크립트가 실행되는 유일한 이유는 위반이 완료되면 빌드를 중단하기 위해서입니다. – bassam

+0

전체 빌드 시간을 알지 못하지만 실제로 의미가 있습니까? 10000 구성 요소의 경우 빌드를 한 번 실행하고 나중에 유효성 검사를 실행하고 모든 깨진 유효성 검사 규칙을 기록한 다음 수정 한 다음 다시 빌드를 시작하는 것이 더 효율적이라고 생각합니다. –

+0

감사합니다. 그러나 위반에 대해 얻은 정보의 양이 성과를 향상시키는 것보다 더 유용하기 때문에 나는 지금 당장 떠나야 할 것이라고 생각합니다. 유효성 검사 서비스를 구현 한 다음 하위 구성 요소가 작성을 완료했을 때 로그를 구문 분석하고 위반 사항을 확인하도록 서비스에 지시하는 유틸리티 스크립트를 구현하려고합니다. – bassam

1

두 가지 선택이 있다고 생각합니다.

1) XML 이외의 것을 사용하십시오. 평범한 텍스트 파일은 XML에 대한 훨씬 더 풍부한 데이터 기술이 필요하지 않다면 간단한 키/값 쌍에 대해 훨씬 빨리 구문 분석 될 수 있습니다.

2) PowerShell이 ​​10,000 개의 구성 요소 각각에 대해 MSBUILD를 제어하도록 빌드 프로세스를 리 팩터합니다. 시작시 XML 파일을로드하고 필요한 단계에서 이들 단계를 참조 할 수 있습니다.

1

같은 XMLDocument 클래스 당신이

params([xml]$xdoc) 
// do stuff w/ $xdoc