我有一个非常庞大的方法,我试图在其中创建比 .NET Framework 支持的更多的局部变量。代码行的大小约为 147000,局部变量的数量约为 75000。我找到了这篇文章 http://support.microsoft.com/kb/919514但是这里说的是.net 2.0中的这个问题,但是我在Windows 8.1中使用的是.net 4.0。我可以手动增加局部变量的限制吗?
我的项目是生成 .docx 文件的简单控制台应用程序。
最佳答案
您刚刚遇到了 MSIL(由 C# 编译器生成的代码)的严格限制。局部变量加载了 Opcodes.LdLoc instruction .此指令有多种变体,针对常见情况进行了优化。我链接到“最大”一个,它需要一个 16 位无符号索引作为局部变量索引。在 MSIL 中编码为 4 个字节:
FE 0C < unsigned int16 >
您发现的修补程序是解决抖动错误,该错误将索引解释为有符号值而不是无符号值。当方法有超过 32767 个局部变量时制作代码炸弹。
但是,很明显,您永远不会拥有超过 UInt16.MaxValue+1
的索引。这是 65,536。使用 75,000 个变量,您超出了该限制。
对此没有解决方法,您必须限制局部变量的数量并将其保持在 65536 以下。
关于c# - 如何增加局部变量的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20657278/