标题实际上(但仍然)出于完整性考虑而要求:

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

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

编辑:

感谢Kelsey指出了真实的测试。
尽管我仍然会担心实际的限制是多少,但出于我的实际生活目的,
我想知道它是2 ^ 16/2 ^ 32-还是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/

10-11 23:15
查看更多