c# - 如何增加局部变量的限制

标签 c# .net

我有一个非常庞大的方法,我试图在其中创建比 .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/

相关文章:

c# - 如何使用 TPL 处理长时间运行的进程

c# - Entity Framework 关系映射中的错误

c# - VS2010 编译器错误 "is not assignable to parameter type T"我相信不是约束问题

.net - 如何判断 Excel 应用程序是否处于单元格编辑模式?

c# - IsAssignableFrom 当接口(interface)有泛型但没有实现时

c# - Application Insights 和失败的请求响应代码

c# - 如何解决在 Asp.NET 中找不到指定模块的错误?

java - 为什么这个 SpriteBatch 在 C# 中工作而不在 Java 中工作?

.net - 从网络位置加载程序集

c# - 如何处理项目计数检查器