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

问题描述

只是为了好玩我运行了该代码

for ($i = 0; $i -le 9999; ++$i) { New-Variable $i $i -ErrorAction Stop }

PowerShell 5.1 返回:

New-Variable : Cannot create variable 4073 because variable capacity 4096 is exceeded for this scope.

但是在 PowerShell 7.0.3 中,我更改了for来创建 1毫安变量。
而且我已经厌倦了等待..当pwsh吞噬了7 Gb RAM时取消了它...
$i当时是 18,401,068

这意味着 PS 7.0.3 对变量计数没有限制,或者它很高。

那么为什么 PS 5.1 中的 4096 变量数没有限制?

解决方法

那么在PS 5.1中为什么有4096个变量计数限制?

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

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

我们可以从公开获得的信息中得知,limitation was removed long before GA发行版的PowerShell Core 6.0 –正是因为没有很好的理由来保留它。