Quali attributi aiutare a runtime .Performance netta?
-
09-06-2019 - |
Domanda
Sto cercando attributi che posso utilizzare per garantire le migliori prestazioni di runtime per il mio .Net application dando dei suggerimenti per il caricatore, il compilatore JIT o ngen.
Per esempio, abbiamo DebuggableAttribute che dovrebbe essere impostato per eseguire il debug e non disattivare l'ottimizzazione per ottenere prestazioni ottimali.
[Debuggable(false, false)]
Ci sono altri che dovrei sapere?
Soluzione
Ecma-335 specifica alcuni più CompilationRelaxations rilassante, la gestione delle eccezioni (il cosiddetto e-rilassato chiama) di cui all'Allegato F "Imprecisi, errori", ma non sono stati esposti da Microsoft.
In Particolare CompilationRelaxations.RelaxedArrayExceptions e CompilationRelaxations.RelaxedNullReferenceException sono menzionati.
Sarebbe interessante cosa succede quando si tenta di alcuni interi nel CompilationRelaxationsAttribute del costruttore ;)
Altri suggerimenti
E un altro:Le stringhe letterali (stringhe dichiarato nel codice sorgente) sono di default internati in una piscina per risparmiare memoria.
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.
Anche se si risparmia memoria quando la stessa stringa letterale è utilizzata più volte, i costi di alcune cpu per mantenere la piscina e una volta che la stringa è la messa in piscina rimane lì fino a quando il processo viene interrotto.
Utilizzando CompilationRelaxationsAttribute si può dire che il compilatore JIT che davvero non si desidera interno tutte le stringhe letterali.
[assembly: CompilationRelaxations(CompilationRelaxations.NoStringInterning)]
Ho trovato un altro: NeutralResourcesLanguageAttribute.Secondo questo post del blog aiuta il caricatore nel trovare la giusta assembly satellite più veloce specificando la cultura se la corrente (neutro) di montaggio.
[NeutralResourcesLanguageAttribute("nl", UltimateResourceFallbackLocation.MainAssembly)]