Ответ 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 будет составлять план выполнения один раз и кэшировать его.
Вы должны (императив) уже использовать параметризованные запросы. Если вы этого не сделаете, бросьте все, что вы делаете, и сделайте это неотложным приоритетом.
Может кто-нибудь, пожалуйста, дайте образец кода С#, который создаст эту проблему памяти. спасибо
Просто сделайте первое в цикле. Наблюдайте за ростом вашей памяти. Сделайте последнее в цикле. Следите за тем, чтобы ваша память не росла.