Профилирование моего приложения Я обнаружил неприятный факт, что набрал Upadte <> (и Query <>). Builder оценивает лямбда-выражения для каждого запроса, потребляя много CPU. Вы получите несколько процентов CPU, переключение с красивой и современной типизированного UpdateBuilder <> как:Как ускорить создание типизированных строителей в 10gen официальном драйвере MongoDB C#?
var u = Update<MyPerson>.Inc(e => e.Age, Age);
старые добрые статические строки:
var u = Update.Inc("Age", Age);
Та же проблема с QueryBuilder <>, это также оценивает выражения для каждого запроса и бесполезно тратит ценные ресурсы ЦП.
Официальные LINQ driver's page государства:
C# компилятор транслирует все запросы, написанные с использованием синтаксиса запросов в синтаксис лямбда внутри так или иначе, так что нет никакого преимущества производительности или штраф выбор либо стиля.
Да, это правда, если вы выбираете между двумя синтаксисами LINQ. Но существует огромная разница в производительности между использованием и использованием синтаксиса LINQ. Накладные расходы зависят от того, как часто ваш клиент выполняет запросы. В моем случае разница выше 30%!
Есть ли способ получить хороший типизированный синтаксис и производительность вместе, интересно?
Простое кэширование результатов построения не является ответом, поскольку мы, очевидно, должны передавать динамические параметры для каждого запроса. Нам нужно найти способ «предварительно скомпилировать» дорогостоящую часть CPU (относительно оценки лямбда-выражений), но сохранить динамические параметры (например, индексы массива).
Да, это правильно, что касается «двух синтаксисов, доступных для написания запросов LINQ» - нет никакой разницы. Я обновил вопрос. –
Но это не отвечает на главный вопрос: почему, если у нас есть определение «статических» свойств документа, нам следует страдать от выполнения довольно дорогостоящих запросов LINQ по каждому запросу? Если мой клиент работает в основном с MongoDb, он потребляет 100% процессор на своем оборудовании, имея только цель генерировать больше тепла для окружающей среды. Нет никакого смысла обрабатывать статические метаданные для каждого запроса. Я бы хотел использовать синтаксис LINQ, мне это очень нравится. Но, к сожалению, не удалось использовать его до тех пор, пока эта проблема не будет исправлена. –
И с нетерпением ждут проблемы с производительностью в: сериализации документов BSON (функция MongoDB.Bson.IO.MultiChunkBuffer.WriteBackingBytes) и таких часто используемых функций, как GetCollection(), которая также потребляет несколько процентов процессора и подвергается объединению в мое приложение. Надеюсь, вы скоро настроите и настроите свой драйвер. Заранее спасибо. Я люблю тебя, водитель и люблю слышать хорошие новости о его исполнении. –