问题描述
只是为了好玩我运行了该代码:
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 –正是因为没有很好的理由来保留它。