如何增加局部变量的限制

本文关键字:局部变量 增加 何增加 | 更新日期: 2024-10-25 08:33:48

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

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

如何增加局部变量的限制

你只是在 MSIL(由 C# 编译器生成的代码)中遇到了一个坚如磐石的限制。 局部变量加载了 Opcodes.LdLoc 指令。 此指令有几种变体,针对常见情况进行了优化。 我链接到"最大"一个,它需要一个 16 位无符号索引作为局部变量索引。 在 MSIL 中编码为 4 个字节:

 FE 0C < unsigned int16 > 

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

但是,很明显,您永远不会拥有超过UInt16.MaxValue+1指数。 这是65,536。 对于 75,000 个变量,您超出了该限制。

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

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

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

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