为什么PowerShell 5中的最大变量数为4096

为什么PowerShell 5中的最大变量数为4096,powershell,powershell-5.0,powershell-core,Powershell,Powershell 5.0,Powershell Core,只是为了好玩,我运行了以下代码: for($i=0;$i-le 9999;++$i){New Variable$i$i-ErrorAction Stop} PowerShell 5.1已返回: 新变量:无法创建变量4073,因为此范围超出了变量容量4096。 但在PowerShell 7.0.3中,我更改了以创建1百万变量。 我已经等得不耐烦了。。当pwsh吃掉了我的7GB内存时取消了它… $i当时是18401068 这意味着PS7.0.3对变量计数没有限制,或者它非常高 那么为什么在PS5.

只是为了好玩,我运行了以下代码:

for($i=0;$i-le 9999;++$i){New Variable$i$i-ErrorAction Stop}
PowerShell 5.1已返回:

新变量:无法创建变量4073,因为此范围超出了变量容量4096。

但在PowerShell 7.0.3中,我更改了
以创建1百万变量。
我已经等得不耐烦了。。当
pwsh
吃掉了我的7GB内存时取消了它…
$i
当时是18401068

这意味着PS7.0.3对变量计数没有限制,或者它非常高

那么为什么在PS5.1中对4096变量计数有限制呢

那么为什么PS5.1中有4096个变量计数的限制呢

因为有人,在某个时候,认为这是个好主意。就这样

也许有人添加了它,因为PowerShell中的变量操作非常昂贵,并且没有超级内存效率。也许其中一个开发人员在测试过程中运行了一个与您非常相似的循环,它耗尽了他的机器上的所有内存,这似乎是一个简单的权宜之计。我们可能永远不会知道


从公开的信息中我们可以看出,PowerShell Core 6.0的GA发行版——正是因为没有很好的理由保留它。

当然这有点武断,但是,我无法想象在一个用例中,你会接近这个上限,如果他们做到了,是时候重构代码了。关于为什么允许在4B对象上添加,我也听到过同样的问题。通过设置默认变量$MaximumVariableCount,可以将其增加到32768