TGViewer
C# Short Posts 🔞 C# Short Posts 🔞 @dimasshortposts · 309 subscribers
Post #118 135
🌴 Expression Trees

Рубрика задротские штучки.

Если вы заглядывали в репозиторий TraleBot’а, то видели там метод IsApplicable у каждой команды. Этот метод в тупую проверяет пользовательский ввод, и, если тот подходит под условия, то вызывается метод Execute у команды.
 
Я подумал, что было бы круто как-то ускорить все эти проверки, и вспомнил, что когда-то давно на одной работе тимлид советовал мне переписывать большие if'ы на Expression Tree. Тогда я поверил, что это всё ускоряет и вопросов не задавал, а сейчас решил проверить, а реально ли оно быстрее работает?
 
🅰️ Оказалось и правда быстрее. К примеру вот такое выражение

return person != null
&& person.Name != null
&& person.Age < 9;
 
Оказалось примерно в два раза медленее, чем аналгичное скомпилированное ExpressionTree (тут неполный код, чисто для примера):

var hasNameAndAge = Expression.AndAlso(
Expression.AndAlso(
objectNotNull,
hasNameNotNull),
hasAgeLessThanParam);



SimpleCodeScenario: 2.662 ns
ExpressionsScenario: 1.213 ns

И вот я пока что-то ХЗ почему так.

P.S: код самого бенчмарка я загнал в sharplab.io, про который когда-то давно рассказывал. Вот ссылочка на него

Может кто-то знает ответ, почему так? Напишите в комменты или мне в личку, а то я так по форумам поискал, но что-то внятного ничего не нашел. Только пост на StackOverflow, где люди нашли ту же зависимость, но внятно ответить, почему так не смогли.
#петпроекты #бенчмарки
  • ❤ 2
More from @dimasshortposts
  1. Oct 2, 2026s
  2. Oct 2, 2026Post #503
  3. Sep 30, 2026🛤 Путь до Tier1: от чего он зависит В прошлый раз мы гоняли hello world в цикле и увидели…
  4. Sep 26, 2026🧵 Тредик для вопросов по докладу про MAF на дотнексте В докладе многие подробности опусти…
  5. Sep 23, 2026Даже самым хардкорным ребятам надо отдыхать, так что отдыхаем, мои чюваки 🕺 🧑‍💻dp🥁 #he…
  6. Sep 16, 2026🎯 Instrumented Tier0: профилирование кода В прошлый раз мы разобрали два уровня компиляци…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →