与SQL Server一起使用时,如何定期刷新dapper.net缓存
-
26-10-2019 - |
题
有人可以解释这意味着什么(从dapper.net网站上)
局限性和警告
Dapper缓存有关其运行的每个查询的信息,这允许它快速实现对象并快速处理参数。当前的实现将此信息缓存在同义对象中。它存储的对象永远不会冲洗。 如果您在不使用参数的情况下即时生成SQL字符串,则可能会遇到内存问题。 我们可以将字典转换为LRU缓存。
我无法理解大胆的含义。我正在使用SQL Server和C#客户端。
有人可以提供将创建此内存问题的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#代码示例。谢谢你
只需循环做前者即可。看着您的记忆力增长。在循环中做后者。注意记忆不会增长。
不隶属于 StackOverflow