2013-12-24 1 views
0

원인 ValidateSet를 사용하는 간단한 함수입니다 :ValidateSet 여기에 긴 일시 정지를

function TestLongValidateSet 
{ 
    param 
    (
     [ValidateSet(...)] 
     $abc 
    ) 

    $abc 
} 

내 버전 대신 ...의 3001 개 항목이가. 파워 쉘로 위의 함수로드 잘

(0..3000 | foreach { (Get-Random -Count 30 (65..90 | ForEach-Object { [char]$_ })) -join '' } | ForEach-Object { "`"$_`"" }) -join ', ' | Out-File test.txt 

어쨌든 :

집에서 함께 따라하려는 경우

, 여기에서이 배치에 적합한 3001 요소 목록을 생성하는 방법입니다. 그러나 IntelliSense를 사용하여 첫 번째 시도는 여러 분 지연을 트리거합니다. 또한 PowerShell ISE는 몇 기가 바이트의 RAM을 소비합니다. 이 지연 후에 RAM 사용량이 정상으로 돌아가고 IntelliSense가 작동하며 모든 것이 응답합니다. $abc 변수의 완료도 응답합니다.

초기 지연이 길어지는 것을 피할 수 있습니까?

+0

전역 네임 스페이스의 집합을 함수 내에서 지정하기 전에 초기화하려고 했습니까? –

답변

2

시도해보십시오. 그것은 사용자 정의 열거 형을 생성하고, 대신 ValidateSet

0..3000 | foreach { (Get-Random -Count 30 (65..90 | ForEach-Object { [char]$_ })) -join '' } | sv enumarray 

$i=0 
$enumlist = ($enumarray | foreach {'{0} = {1}' -f $_,$i++}) -join ', ' 

$enum = " 
namespace myspace 
{ 
public enum myenum 
{ 
$enumlist 
} 
} 
" 
Add-Type -TypeDefinition $enum -Language CSharpVersion3 

의 당신은 함수 내에서 그것을 넣을 수 있다는 것을 사용하지만, 내 시스템에, 열거를 만드는 약 200 밀리 초 걸립니다. 루프 내에서이 코드를 실행하려고한다면, 함수가 실행될 때마다 그것을 수행 할 필요가 없도록 부모 범위에서 코드를 생성 할 것입니다.

function TestLongValidateSet 
{ 
param 
(
    [myspace.myenum]$abc 
) 

$abc 
} 
+0

와우 ... 완벽하게 작동합니다! 덕분에 너무 많은 mjolinor !!! – dharmatech

관련 문제