kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
Karl Seguin
Karl Seguin
Вопрос

Будут ли в .NET оптимизироваться пустые вызовы методов?

Если тело метода пустое, будет ли JIT оптимизировать вызов (я знаю, что компилятор C# не будет). Как я могу это выяснить? Какие инструменты я должен использовать и где искать?

Поскольку я уверен, что меня об этом спросят, причиной пустого метода является директива препроцессора.


@Chris: Логично, но это может оптимизировать вызовы метода. Таким образом, метод будет существовать, но статические вызовы к нему могут быть удалены (или, по крайней мере, инклудированы...).

@Jon: Это просто говорит мне, что компилятор языка ничего не делает. Я думаю, что мне нужно прогнать мою dll через ngen и посмотреть на сборку.

23 2008-08-14T23:33:35+00:00 4
Bhargav Rao
Bhargav Rao
Редактировал вопрос 18-го апреля 2017 в 1:50
Программирование
.net
performance
 Kev
Kev
14-го августа 2008 в 11:43
2008-08-14T23:43:29+00:00
Дополнительно
Источник
Редактировать
#8415486

У этого парня есть довольно хорошее описание JIT-оптимизации, выполните поиск на странице по 'method is empty', это примерно половина статьи -...

http://www.codeproject.com/KB/dotnet/JITOptimizations.aspx

По-видимому, пустые методы действительно оптимизируются за счет инлайнинга того, что фактически не является кодом.

@Chris: Я понимаю, что методы все равно будут частью бинарного файла и что это JIT-оптимизация :-). На полусвязанной ноте, у Скотта Хансельмана была довольно интересная статья об инлайнинге в стеках вызовов Release build:

http://www.hanselman.com/blog/ReleaseISNOTDebug64bitOptimizationsAndCMethodInliningInReleaseBuildCallStacks.aspx

 Kev
Kev
Редактировал ответ 24-го ноября 2013 в 7:37
13
0
 Keith
Keith
15-го августа 2008 в 8:38
2008-08-15T08:38:41+00:00
Дополнительно
Источник
Редактировать
#8415487

Я'м предполагаю, что ваш код-это:

void DoSomethingIfCompFlag() {
#if COMPILER_FLAG
    //your code
#endif
}

Это выиграл'т получить оптимизированный, однако:

partial void DoSomethingIfCompFlag();

#if COMPILER_FLAG
partial void DoSomethingIfCompFlag() {
    //your code
}
#endif

Первый способ-это частичная, а компилятор C#3 будет оптимизировать его.


Кстати: это в основном то, что частичные методы для. Microsoft добавила генераторы кода для их дизайнеры LINQ, который нужно вызывать методы, которые по умолчанию Дон'т сделать что-нибудь.

А не заставить вас перегружать метод, вы можете использовать частичное.

Таким образом, частичные полностью оптимизирован, если не используется и производительность не теряется, а не затрат на лишние пустые вызова метода.

 Keith
Keith
Редактировал ответ 15-го августа 2008 в 9:25
13
0
Chris Smith
Chris Smith
14-го августа 2008 в 11:39
2008-08-14T23:39:53+00:00
Дополнительно
Источник
Редактировать
#8415484

Нет, пустые методы никогда не оптимизируются. Вот несколько причин, почему:

  • Метод может быть вызван из производного класса, возможно, в другой сборке
  • Метод может быть вызван с помощью Reflection (даже если он помечен как частный)

Edit: Да, судя по этому (отличному) документу проекта кода, JITer устранит вызовы пустых методов. Но сами методы все равно будут скомпилированы и станут частью вашего двоичного файла по причинам, которые я перечислил.

Chris Smith
Chris Smith
Редактировал ответ 14-го августа 2008 в 11:53
2
0
Andrew Grant
Andrew Grant
14-го августа 2008 в 11:41
2008-08-14T23:41:30+00:00
Дополнительно
Источник
Редактировать
#8415485

При прочих равных условиях, да, это должно быть оптимизировано. JIT инлайнит функции там, где это уместно, и мало что может быть более уместным, чем пустые функции :)

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

1
0
Похожие сообщества 12
DotNetRuChat
DotNetRuChat
6 630 пользователей
Чат русскоязычного .NET сообщества http://dotnet.ru/ Правила: https://t.me/DotNetRuChat/704399 Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @AvaloniaRU, @xamarin_russia, @DotNetRuJobs, @uwp_ru Флуд в @dotnettalks
Открыть telegram
Вакансии .NET
Вакансии .NET
3 530 пользователей
Правила: https://t.me/DotNetRuJobs/123 Канал с вакансиями - https://t.me/DotNetRuJobsFeed Вам могут быть интересны: @dotnetruchat, @cilchat, @fsharp_chat, @pro_net, @AvaloniaRU, @xamarin_russia Флуд в @dotnettalks
Открыть telegram
pro.net
pro.net
1 820 пользователей
Обсуждение .NET и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). https://t.me/pro_net/34653 Флудилка: @dotnettalks
Открыть telegram
var chat = new Chat();
var chat = new Chat();
1 428 пользователей
Обсуждение вопросов по .NET Правила чата – https://blog.devdigest.today/chat-rules Чат для флуда – https://t.me/+zwxI91RGG6s2YzAy
Открыть telegram
.NET Talks - День сурка
.NET Talks - День сурка
1 324 пользователей
Свободный чат .NET разработчиков. Правила: https://t.me/dotnettalks/548269 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @DotNetRuJobs, @uwp_ru, @AvaloniaRu, @dotnettalksenglish
Открыть telegram
Чат конференции DotNext
Чат конференции DotNext
987 пользователей
Канал конференции: @dotnext_channel Ближайшая конференция — DotNext 2022 Autumn, даты будут анонсированы позднее Билеты https://tinyurl.com/DotNext2023Autumn Саппорт: @JUGConfSupport_bot
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 2 дня назад
2
Денис Васьков
Зарегистрирован 3 дня назад
3
Dima Patrushev
Зарегистрирован 6 дней назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
ID
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией