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

dam*_*boy 8 .net standards il command-line-interface

标题实际上是要求所有,但为了完整起见:

嗨,我正在.NET平台上编写一个小的后编译工具,在尝试优化它时,我遇到了一个问题,我不能轻易找到ECMA标准的公共语言基础结构的答案(CLI).

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

编辑:

感谢Kelsey指出真实的测试.虽然我仍然会关心实际限制是什么,但对于我的实际目的,我想知道它是否是2 ^ 16/2 ^ 32 - 或 - 2 ^ 31-1,正如他所指出的,它出现了显然高于每级64K方法..

Kel*_*sey 6

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

我找到了这个帖子,其中有人编写了以下测试来实际创建一个具有越来越多函数的类来查看断点的位置:

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() ) ;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

基于结果,它看起来像资源依赖,而不是最有可能没有硬定义的规范,除非你将它绑定到32/64位索引引用或我认为不现实的东西,因为你会遇到资源限制可能首先.

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

再次,有趣但不是所有有用的信息IMO.