Popou
@Popou
Программист энтузиаст , обожаю саморефлексию

Что плохого в использованиe в MethodImpl(MethodImplOptions.AggressiveOptimization)?

Решил я значит поиграть со слабыми ссылками:
var mc = new ManagedClass();

var wr = new WeakReference(mc);

Console.WriteLine(wr.Target ?? "not exist");
mc = null;
GC.Collect();
Console.WriteLine(wr.Target ?? "not exist");

Если добавить атрибут то выйдет следующий результат:
ManagedClass
not exist

Если же нет:
ManagedClass
ManagedClass

И вот вопрос, почему MethodImpl(MethodImplOptions.AggressiveOptimization) не установлен везде по умолчанию? Ведь все по итогу работает так как, и ожидалось: если на объект нет ссылки то GC его удаляет, если есть то не трогает.
  • Вопрос задан
  • 163 просмотра
Решения вопроса 2
AshBlade
@AshBlade Куратор тега C#
Просто хочу быть счастливым
Во-первых, каждый раз это писать утомишься.
Во-вторых, в .NET умный алгоритм оптимизации, если надо будет он оптимизирует сам.
В-третьих, оптимизация ресурсоемкий процесс. В данном случае все быстро произошло. А теперь представить огромный проект на несколько миллионов строк кода, где некоторые части вообще не используются либо запускаются только 1 раз. Все они должны будут оптимизироваться самым ярым образом.

В итоге: никто не запрещает его везде использовать, просто это "Экономически" не выгодно
Ответ написан
Комментировать
Плохо тем что JIT будет нагружаться лишний раз там, где это не требуется.
Лучше этим атрибутом помечать только очевидные hot path.
Аналогично с агрессивным инлайнингом - только с ним ещё страшнее.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы