Gul*_*llu 19 c# t-sql orm sql-server-2005 dapper
有人可以解释一下这意味着什么(来自Dapper.net网站)
限制和警告
Dapper缓存有关它运行的每个查询的信息,这允许它快速实现对象并快速处理参数.当前实现将此信息缓存在ConcurrentDictionary对象中.它存储的对象永远不会被刷新.如果您在不使用参数的情况下动态生成SQL字符串,则可能会遇到内存问题.我们可以将字典转换为LRU缓存.
我无法理解粗体表示的行.我正在使用SQL Server和c#客户端.
有人可以提供一些c#代码示例,这些代码会产生内存问题.谢谢
jas*_*son 47
如果您在不使用参数的情况下动态生成SQL字符串,则可能会遇到内存问题.
你可以这样做:
cmd.CommandText = "SELECT email, passwd, login_id, full_name " +
"FROM members " +
"WHERE email = '" + email + "'";
Run Code Online (Sandbox Code Playgroud)
或者你可以这样做:
string s = "SELECT email, passwd, login_id, full_name " +
"FROM members WHERE " +
"email = @email";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@email", email);
Run Code Online (Sandbox Code Playgroud)
后者是参数化的.它将被缓存一次.前者未参数化.每次编写具有不同值的查询时,它都会被缓存email.这会爆炸你的记忆.
后者非常优越.它避免了注入攻击.dapper可以缓存一次.SQL Server将编译执行计划一次并将其缓存.
您应该(命令性)已经使用参数化查询.如果不是,请放弃您正在做的所有事情,并将其作为当务之急.
有人可以提供一些c#代码示例,这些代码会产生内存问题.谢谢
只需在循环中完成前者.留意你的记忆力增长.在循环中做后者.注意你的记忆不会增长.
| 归档时间: |
|
| 查看次数: |
4398 次 |
| 最近记录: |