Какие атрибуты помогают выполнить производительность .Net?

Я ищу атрибуты, которые я могу использовать для обеспечения наилучшей производительности во время выполнения моего приложения .Net, давая подсказки загрузчику, компилятору JIT или ngen.

Например, DebuggableAttribute, который должен быть настроен на то, чтобы не отлаживать и не отключать оптимизацию для оптимальной производительности.

[Debuggable(false, false)]

Есть ли другие, о которых я должен знать?

Ответы

Ответ 1

Ecma-335 указывает еще несколько компиляционных релаксаций для расслабленной обработки исключений (так называемые e-relaxed calls) в приложении F "Неточные ошибки", но они не были обнаружены Microsoft.

В частности, упоминаются компиляцииRelaxations.RelaxedArrayExceptions и CompilationRelaxations.RelaxedNullReferenceException.

Было бы интересно, что произойдет, когда вы просто попробуете целые числа в CompilationRelaxationsAttribute ctor;)

Ответ 2

И еще: Литеральные строки (строки, объявленные в исходном коде) по умолчанию интернированы в пул для сохранения памяти.

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.

Хотя он сохраняет память, когда одна и та же буквальная строка используется несколько раз, она требует некоторого процессора для поддержания пула, и как только строка помещается в пул, он остается там до тех пор, пока процесс не будет остановлен.

Используя CompilationRelaxationsAttribute, вы можете сообщить компилятору JIT, что вы действительно не хотите, чтобы он выполнял все литеральные строки.

[assembly: CompilationRelaxations(CompilationRelaxations.NoStringInterning)]

Ответ 3

Я нашел другое: NeutralResourcesLanguageAttribute. Согласно сообщению this в блоге, он помогает загрузчику быстрее найти правильные сборки спутников, указав культуру, если текущая (нейтральная) сборка.

[NeutralResourcesLanguageAttribute("nl", UltimateResourceFallbackLocation.MainAssembly)]