dapper.net, как очистить ConcurrentDictionary?

concurrentdictionary dapper

Вопрос

Я новичок в dapper и планирую использовать его в своем новом проекте. После прочтения это похоже на единственную проблему, с которой я мог столкнуться, - ConcurrentDictionary.

Dapper кэширует информацию о каждом запущенном запросе, что позволяет быстро и быстро обрабатывать объекты и быстро обрабатывать параметры. Текущая реализация кэширует эту информацию в объекте ConcurrentDictionary. Объекты, которые он хранит, никогда не краснеют. Если вы генерируете строки SQL «на лету» без использования параметров, вы можете столкнуться с проблемами памяти. Мы можем преобразовать словари в LRU Cache.

Как избежать этой проблемы? Может кто-нибудь, пожалуйста, покажите мне какой-нибудь код, расскажите мне, как и когда его нужно очистить?

Принятый ответ

В комментариях вверху, вот пример «на лету»:

var builder = new StringBuilder();
builder.AppendLine("SELECT Foo FROM Bar");
if (fisrtName != null || lastName != null)
    builder.AppendLine("WHERE");
if (firstName != null)
    builder.AppendLine("    Bar.FirstName = @Firstname");
if (firstName != null && lastName != null)
    builder.Append(" AND");
if (lastName != null)
    builder.AppendLine("    Bar.LastName = @LastName");
var sql = builder.ToString();

Как вы можете видеть, фактический SQL, который теперь запускает dapper, будет отличаться в зависимости от того, являются ли firstName и / или lastName null. Если оба значения равны нулю, вы получаете одну строку SQL. Если только firstName не является нулевым, вы получаете другое. Если только lastName не является нулевым, вы получаете еще один. И, наконец, если оба значения не равны нулю, вы получаете четвертую перестановку.

Это то, что подразумевается под «на лету» - dapper будет кэшировать на основе этих уникальных перестановок, и, учитывая более сложный сценарий, легко увидеть, как вы закончите с множеством разных перестановок, все из которых необходимо будет кэшировать независимо.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему