Dot-Net
每個 .NET 類的最大方法數是多少
標題實際上詢問了所有內容,但為了完整起見:
嗨,我正在 .NET 平台上編寫一個小型後編譯工具,在嘗試對其進行優化時,我遇到了一個問題,我無法從通用語言基礎架構的 ECMA 標準中輕鬆找到答案(命令行)。
單個類可以擁有的最大方法數是多少?有限制嗎?
編輯:
感謝 Kelsey 指出現實生活中的測試。儘管我仍然會關心實際限制是什麼,但出於我實際的現實生活目的,我想知道它是 2^16 / 2^32 -or- 2^31-1,正如他所指出的那樣,它似乎明顯高於每類 64K 方法..
有趣的問題,但不知道為什麼你會在現實中達到極限,所以答案可能不是那麼有用,因為它是一個很高的數字。
我發現這個執行緒,有人編寫了以下測試來實際創建一個具有越來越多函式的類,以查看斷點在哪裡:
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() ) ; } } } }根據結果,它看起來與資源有關,而不是最有可能沒有硬定義的規範,除非您將其綁定到 32/64 位索引引用或我認為不現實的東西,因為您會遇到無論如何,資源限制可能首先。
由於缺乏資源,該測試在失敗之前超過了 200k+。
同樣,有趣但並非所有有用的資訊 IMO。