Какие атрибуты помогают производительности .Net во время выполнения? - PullRequest
14 голосов
/ 16 сентября 2008

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

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

[Debuggable(false, false)]

Есть ли еще кто-то, о ком я должен знать?

Ответы [ 3 ]

5 голосов
/ 17 сентября 2008

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

В частности, упомянуты исключения CompilationRelaxations.RelaxedArrayException и CompilationRelaxations.RelaxedNullReferenceException.

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

2 голосов
/ 16 сентября 2008

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

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)]
1 голос
/ 16 сентября 2008

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

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