.net - 每个 .NET 类的最大方法数是多少

标签 .net standards command-line-interface il

标题实际上询问了所有内容,但为了完整起见:

嗨,我正在 .NET 平台上编写一个小型后编译工具,在尝试对其进行优化时,我遇到了一个问题,我无法从通用语言基础架构的 ECMA 标准中轻松找到答案( CLI)。

单个类可以拥有的最大方法数是多少?有限制吗?

编辑 :

感谢 Kelsey 指出现实生活中的测试。
虽然我仍然会关心实际限制是多少,但出于我实际的现实生活目的,
我想知道它是 2^16/2^32 -or- 2^31-1,正如他所指出的,它似乎明显高于每类 64K 方法..

最佳答案

有趣的问题,但不知道为什么你会在现实中达到极限,所以答案可能不是那么有用,因为它是一个很高的数字。

我找到了 thread有人编写了以下测试来实际创建一个具有越来越多的函数的类,以查看断点在哪里:

namespace MethodCountLimitFinder
{
    class Program
    {
        [System.STAThreadAttribute]
        static void Main ( string [] args )
        {
            Microsoft.CSharp.CSharpCodeProvider provider = 
                new Microsoft.CSharp.CSharpCodeProvider() ;
            System.CodeDom.Compiler.CompilerParameters cp = 
                new System.CodeDom.Compiler.CompilerParameters() ;
            cp.GenerateExecutable = false ;
            cp.GenerateInMemory = true ; 
            System.CodeDom.Compiler.CompilerResults cr = null ;
            System.Text.StringBuilder inner = 
               new System.Text.StringBuilder ( "namespace Tester { class Test {" ) ;

            int methodCount = 1000000 ; 
            while ( true )
            {
                System.Console.WriteLine ( methodCount ) ;

                for ( int i = methodCount ; i > 0 ; i-- )
                {
                    inner.AppendFormat ( "void M{0}(){{}}\n" , methodCount++ ) ;
                }    
                inner.Append ( "}}" ) ;                
                cr = provider.CompileAssemblyFromSource ( cp , inner.ToString() ) ;
                if ( cr.Errors.Count > 0 )
                {
                    break;
                }                
                inner.Remove ( inner.Length - 2 , 2 ) ;
            } 
            foreach (  System.CodeDom.Compiler.CompilerError ce in cr.Errors )
            {
                System.Console.WriteLine ( ce.ToString() ) ;
            }
        }
    }
}

根据结果​​,它看起来与资源有关,而不是最有可能没有硬定义的规范,除非您将其绑定(bind)到 32/64 位索引引用或我认为不现实的东西,因为您会遇到无论如何,资源限制可能首先。

由于缺乏资源,该测试在失败之前超过了 200k+。

同样,有趣但并非所有有用的信息 IMO。

关于.net - 每个 .NET 类的最大方法数是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6295353/

相关文章:

asp.net - .NET Core 2 - 创建具有存储库的 Controller 类的实例

c# - 异步函数进行异步调用

html - 在 HTML5 中混合显式和隐式分段时不可能的情况?

perl - 更好的 CLI Tumblr 工具

mysql - 使用命令行截断 MySQL 数据库中的特定表

asp.net - GetCountries 从 .NET 不提供所有国家?

c# - .NET的 `Array.Sort()`方法使用的排序算法是稳定算法吗?

apache - URL 中是否允许使用冒号?

html - 有效的字体系列名称

javascript - Package.json 文件是 Angular 2 plus 项目的必需文件吗?