我只是在PowerShell中尝试了一些事情并且在某些测试递归函数中出现了关于调用深度被设置为1000的错误。我在互联网上查找了一些信息,发现这是由于PowerShell中的错误处理(如果我做对了):
递归深度限制在版本1中得到修复。由于处理异常的方式,深度递归导致64位模式出现问题。它导致级联内存不足错误。最终结果是我们严格限制所有平台上的递归深度,以帮助确保脚本可以移植到所有平台。 - PowerShell的联合设计师Bruce Payette
我发现它here。
此外,我在MSDN上发现此异常页面指出此限制是可配置的(但我没有找到有关如何执行此操作的任何内容) - 请参阅备注部分here。
如何设置此限制?
答案 0 :(得分:4)
使用.NET Reflector,我们可以在此代码段中看到System.Management.ExecutionContext
类代码,
internal int IncrementScopeDepth()
{
using (IDisposable disposable = tracer.TraceMethod("{0}", new object[] { this.scopeDepth }))
{
if (this.CurrentPipelineStopping)
{
throw new PipelineStoppedException();
}
this.scopeDepth++;
if (this.scopeDepth > 100)
{
ScriptCallDepthException exceptionRecord = new
ScriptCallDepthException(this.scopeDepth, 100);
tracer.TraceException(exceptionRecord);
throw exceptionRecord;
}
return this.scopeDepth;
}
}
无法修改 硬编码100 。
再次查看代码时,似乎没有办法绕过默认的最大调用深度。