Подтвердить что ты не робот

Как периодически очищать кеш dapper.net при использовании с SQL Server

Может кто-нибудь объяснить, что это значит (с сайта Dapper.net)

Ограничения и оговорки

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

Я не могу понять, что означает линия, выделенная жирным шрифтом. Я использую SQL Server и клиент С#.

Может кто-нибудь, пожалуйста, дайте образец кода С#, который создаст эту проблему памяти. спасибо

4b9b3361

Ответ 1

Если вы генерируете строки SQL "на лету" без использования параметров, вы можете столкнуться с проблемами памяти.

Вы можете сделать это:

cmd.CommandText = "SELECT email, passwd, login_id, full_name " + 
                  "FROM members " +
                  "WHERE email = '" + email + "'";

или вы можете сделать это:

string s = "SELECT email, passwd, login_id, full_name " + 
           "FROM members WHERE " +
           "email = @email";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@email", email);

Последний параметризуется. Он будет кэшироваться один раз. Первый не параметризуется. Он будет кэшироваться каждый раз, когда вы пишете такой запрос с другим значением для email. Это взорвет вашу память.

Последнее значительно превосходит. Это позволяет избежать инъекций. dapper может кэшировать его один раз. SQL Server будет составлять план выполнения один раз и кэшировать его.

Вы должны (императив) уже использовать параметризованные запросы. Если вы этого не сделаете, бросьте все, что вы делаете, и сделайте это неотложным приоритетом.

Может кто-нибудь, пожалуйста, дайте образец кода С#, который создаст эту проблему памяти. спасибо

Просто сделайте первое в цикле. Наблюдайте за ростом вашей памяти. Сделайте последнее в цикле. Следите за тем, чтобы ваша память не росла.