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 его удаляет, если есть то не трогает.
  • Вопрос задан
  • 98 просмотров
Решения вопроса 2
AshBlade
@AshBlade Куратор тега C#
Просто хочу быть счастливым
Во-первых, каждый раз это писать утомишься.
Во-вторых, в .NET умный алгоритм оптимизации, если надо будет он оптимизирует сам.
В-третьих, оптимизация ресурсоемкий процесс. В данном случае все быстро произошло. А теперь представить огромный проект на несколько миллионов строк кода, где некоторые части вообще не используются либо запускаются только 1 раз. Все они должны будут оптимизироваться самым ярым образом.

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

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

Войти через центр авторизации
Похожие вопросы