0

这是一个使用的简单函数ValidateSet

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

    $abc
}

我的版本有 3001 个项目,而不是....

如果你想在家里跟着,这里有一种方法可以生成一个适合放置在那里的 3001 元素列表:

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

无论如何,上面的函数加载到 PowerShell 中就好了。但是,第一次尝试使用 IntelliSense 会触发数分钟的延迟。PowerShell ISE 还会继续消耗几 GB 的 RAM。在此延迟之后,RAM 使用量恢复正常,IntelliSense 工作,一切都响应。甚至$abc变量的完成也是响应式的。

有没有办法避免长时间的初始延迟?

4

1 回答 1

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
}
于 2013-12-24T03:40:05.413 回答