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

StackOverflow https://stackoverflow.com/questions/6818258

Вопрос

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

Ограничения и предостережения

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

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

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

Это было полезно?

Решение

Если вы генерируете строки 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 составит план выполнения один раз и кэширует его.

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

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

Просто сделай первое в петле. Смотрите, как ваша память растут. Сделайте последнее в петле. Смотрите, как ваша память не растут.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top