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

StackOverflow https://stackoverflow.com/questions/70150

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

[Debuggable(false, false)]

Есть ли еще какие-нибудь, о которых мне следует знать?

Это было полезно?

Решение

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

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

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

Другие советы

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

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.

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

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

[assembly: CompilationRelaxations(CompilationRelaxations.NoStringInterning)]

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

[NeutralResourcesLanguageAttribute("nl", UltimateResourceFallbackLocation.MainAssembly)]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top