Какие атрибуты помогают выполнить производительность .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)]