Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何提高局部变量的极限_C#_.net - Fatal编程技术网

C# 如何提高局部变量的极限

C# 如何提高局部变量的极限,c#,.net,C#,.net,我有一个非常庞大的方法,我试图创建比.NET Framework支持的更多的局部变量。大约代码行的大小为147000,局部变量的计数约为75000。我发现了这篇文章,但这里告诉我这个问题在.NET2.0中,但我在Windows8.1中使用.NET4.0。我可以手动增加局部变量的限制吗 我的项目是生成.docx文件的简单控制台应用程序。您确实需要将其分解为更小的方法/类。这是一个巨大的文件,最终除您之外的其他人将不得不支持它 诀窍不是找到某种方法让运行时允许更多的局部变量,而是首先编写合适的代码。

我有一个非常庞大的方法,我试图创建比.NET Framework支持的更多的局部变量。大约代码行的大小为147000,局部变量的计数约为75000。我发现了这篇文章,但这里告诉我这个问题在.NET2.0中,但我在Windows8.1中使用.NET4.0。我可以手动增加局部变量的限制吗


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

您确实需要将其分解为更小的方法/类。这是一个巨大的文件,最终除您之外的其他人将不得不支持它


诀窍不是找到某种方法让运行时允许更多的局部变量,而是首先编写合适的代码。哦,任何这么大的东西都不属于“简单控制台应用程序”类别

一个大方法最多可以包含20或25行。一些编程人员会告诉你,一个方法即使20行也太多了。你必须把这个方法分成许多不同的方法。你所描述的代码显然是一个糟糕的代码,而且很难调试、理解或修复。

你只是在MSIL中遇到了一个硬限制,MSIL是由C#编译器生成的代码。一个局部变量加载了。此指令有几种变体,针对常见情况进行了优化。我链接到“maximum”索引,它采用16位无符号索引作为局部变量索引。在MSIL中编码为4字节:

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

但是,很明显,你永远不会拥有超过
UInt16.MaxValue+1
的索引。是65536。有了75000个变量,您就超过了这个限制


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

147K行和75K变量?一个“简单的控制台应用程序”——也许你在这里问错了问题。通常,我会说“发布一些代码”。。。但是请不要;-)重构怎么样?它是从OpenXMLSDK2.5自动生成的代码,是的,在小的重构之后,我有147k行和75k个变量。如果它是自动生成的,那么他最好不要重构,只要重新自动生成任何问题。这不是SDK比框架更大的问题吗?你用一种方法编写新的操作系统吗?是的,我将每个类分成5-6k个变量,但仍然有相同的问题。如果这是一个“简单的控制台应用程序”,我很好奇OP认为什么是“相当复杂的应用程序”,更不用说“该死的复杂应用程序”:D@BorHunter-问题是,你不可能需要这么多的变量!如果你能发布一小段代码,让我们看看你在做什么,那会很有趣。+1“保持在65536以下”-最好在下面。