如何增加局部变量的限制

时间:2013-12-18 11:45:17

标签: c# .net

我有一个非常庞大的方法,我尝试创建比.NET Framework支持的更多局部变量。代码行的大小大小是147000,局部变量的大小约为75000.我发现这篇文章http://support.microsoft.com/kb/919514但是这里告诉了.net 2.0中的这个问题,但我在Windows 8.1中使用.net 4.0 。我可以增加局部变量的手动限制吗?

我的项目是简单的控制台应用程序,它生成.docx文件。

3 个答案:

答案 0 :(得分:11)

你只是在MSIL中遇到了一个严峻的限制,这是由C#编译器生成的代码。使用Opcodes.LdLoc instruction加载局部变量。该指令有多种变体,针对常见情况进行了优化。我链接到“最大”的一个,它需要一个16位无符号索引的局部变量索引。在MSIL中编码为4个字节:

 FE 0C < unsigned int16 > 

您找到的修补程序是解决一个抖动错误,该错误将索引解释为有符号值而不是无符号值。当方法有超过32767个局部变量时,制作代码炸弹。

但是,显然,你永远不会有超过UInt16.MaxValue+1个指数。这是65,536。有75,000个变量,你超过了这个限制。

没有解决方法,必须限制局部变量的数量并将其保持在65536以下。

答案 1 :(得分:1)

你真的需要把它分解成更小的方法/类。这是一个巨大的文件,最终除了你以外的人必须支持它。

诀窍不在于找到一些方法来让运行时允许更多本地人,而是首先编写体面的代码。哦,任何这么大的东西都不属于“简单的控制台应用程序”类别!

答案 2 :(得分:1)

一个大方法最多可包含20或25行。一些程序员会告诉你,一个方法甚至20行太多了。您必须将此方法划分为大量不同的方法。您描述的代码显然是一个糟糕的代码,也是一个很难调试,理解或修复的代码。