Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
906
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
В.NET, будут ли оптимизированы пустые вызовы методов?
Учитывая пустое тело метода, будет ли JIT оптимизировать вызов (я знаю, что компилятор C# не будет). Как бы мне это выяснить? Какие инструменты я должен использовать и где я должен искать?
Поскольку я уверен, что его спросят, причина пустого метода-директива препроцессора.
@Chris: Имеет смысл,но это может оптимизировать вызовы метода. Таким образом, метод все еще будет существовать, но статические вызовы к нему могут быть удалены (или, по крайней мере, встроены...)
@Jon: Это просто говорит мне, что компилятор языка ничего не делает. Я думаю, что мне нужно сделать, это запустить мой dll через ngen и посмотреть на assembly.
У этого парня довольно хорошая обработка оптимизаций JIT, сделайте поиск на странице Для "метод пуст", это примерно на полпути вниз по статье -
http://www.codeproject.com/KB/dotnet/JITOptimizations.aspx
По-видимому, пустые методы действительно оптимизируются за счет вставки того, что фактически не является кодом.
@Chris: я действительно понимаю, что методы все равно будут частью двоичного кода и что это JIT оптимизация :-). На полу-родственной ноте у Скотта Ханселмана была довольно интересная статья о встраивании в стеки вызовов сборки выпуска:
Я предполагаю, что ваш код такой::
void DoSomethingIfCompFlag() {
#if COMPILER_FLAG
//your code
#endif
}
Однако это не будет оптимизировано:
partial void DoSomethingIfCompFlag();
#if COMPILER_FLAG
partial void DoSomethingIfCompFlag() {
//your code
}
#endif
Первый пустой метод является частичным, и компилятор C#3 оптимизирует его.
Кстати: именно для этого в основном и существуют парциальные методы. Microsoft добавила генераторы кода в свои конструкторы Linq, которые должны вызывать методы, которые по умолчанию ничего не делают.
Вместо того, чтобы заставлять вас перегружать метод, вы можете использовать частичный.
Таким образом, партиалы полностью оптимизируются, если они не используются, и не теряется производительность, а не добавляются накладные расходы на дополнительный пустой вызов метода.
Нет, пустые методы никогда не оптимизируются. Вот несколько причин почему:
- Метод может быть вызван из a производный класс, возможно, в a различные assembly
- Метод мог бы вызываться с помощью отражения (даже если он помечен как частный)
Edit: да, глядя на этот (отличный) кодовый проект doc, JITer устранит вызовы пустых методов. Но сами методы все равно будут скомпилированы и станут частью вашего двоичного кода по причинам, которые я перечислил.
При прочих равных условиях, да, он должен быть оптимизирован. JIT inlines функции там, где это уместно, и есть несколько вещей, более подходящих, чем пустые функции :)
Если вы действительно хотите быть уверены, то измените свой пустой метод, чтобы создать исключение и распечатать стек trace, который он содержит.