Здравствуйте, ·, Вы писали:
·>Нет, я свожу к абсурду твою точку зрения. Хотя ты опять сам справляешься лучше. Вот сейчас сказал, что PHP тормоза не оказывают ощутимое влияние в случае работы с СУБД, а linq рефлексия (которой как выяснилось нет) вдруг стала источником тормозов?
Уже месяц хочу от него пояснений, так что может еще один-другой месяц и выясним все секреты
_>>Ты похоже путаешь просто linq и linq2database. В первом случае у нас действительно исполняется само выражение. А во втором случае совсем другая схема — выражение используется по сути как набор данных (дерево) из которых генерируется sql текст.
·>Ок. Допустим. И причём тут рефлексия?
·>И чем принципиально этот набор данных отличается от такого if(categoryName) q.where.add(Category.name.like(*categoryName+"%"))?
Принципиально по выражениям выполняется компиляция запроса в SQL с оптимизациями, как говорит IT, на нескольких уровнях. От устранения лишних полей, до изменения структуры запросов.
alex_public утверждает, что
1 разница недопустимо велика (10-100% в замерах на синтетических вусмерть закешированых запросах)
2 весь оверхед чистая рефлексия
_>>Нет, дерево выражений строится на этапе компиляции. Но отдельные его элементы могут быть доступны для модификации. )
·>Как и в linq по сути. В чём отличие-то?
Он считает, что ручная оптимизация сборет любое linq-решение. То есть, все что надо, это склейка-на-стероидах, своего рода DSL на шаблонах С++, который выдаст качественный код склейки строк.