ローダー、JITコンパイラ、またはngenにヒントを与えることで、.Netアプリケーションの最高のランタイムパフォーマンスを確保するために使用できる属性を探しています。
たとえば、最適なパフォーマンスを得るために、デバッグせず、最適化を無効にしないように設定する必要があるDebuggableAttributeがあります。
[Debuggable(false, false)]
他に知っておくべきことはありますか?
ローダー、JITコンパイラ、またはngenにヒントを与えることで、.Netアプリケーションの最高のランタイムパフォーマンスを確保するために使用できる属性を探しています。
たとえば、最適なパフォーマンスを得るために、デバッグせず、最適化を無効にしないように設定する必要があるDebuggableAttributeがあります。
[Debuggable(false, false)]
他に知っておくべきことはありますか?
Ecma-335 は、Annex F の「不正確な障害」で緩和された例外処理 (いわゆる e-relaxed 呼び出し) の CompilationRelaxations をさらに指定していますが、Microsoft によって公開されていません。
具体的には CompilationRelaxations.RelaxedArrayExceptions と CompilationRelaxations.RelaxedNullReferenceException が記載されています。
CompilationRelaxationsAttribute の ctor でいくつかの整数を試してみるとどうなるか興味深いでしょう ;)
もう 1 つ: リテラル文字列 (ソース コードで宣言された文字列) は、メモリを節約するために既定でプールにインターンされます。
string s1 = "MyTest";
string s2 = new StringBuilder().Append("My").Append("Test").ToString();
string s3 = String.Intern(s2);
Console.WriteLine((Object)s2==(Object)s1); // Different references.
Console.WriteLine((Object)s3==(Object)s1); // The same reference.
同じリテラル文字列が複数回使用されるとメモリが節約されますが、プールを維持するために CPU がいくらか消費され、文字列がプールに入れられると、プロセスが停止するまでそこに留まります。
CompilationRelaxationsAttributeを使用すると、すべてのリテラル文字列をインターンする必要がないことを JIT コンパイラに伝えることができます。
[assembly: CompilationRelaxations(CompilationRelaxations.NoStringInterning)]
私は別のものを見つけました:NeutralResourcesLanguageAttribute。このブログ投稿によると、現在の(中性の)アセンブリのカルチャを指定することで、ローダーが適切な衛星アセンブリをより速く見つけるのに役立ちます。
[NeutralResourcesLanguageAttribute("nl", UltimateResourceFallbackLocation.MainAssembly)]