【发布时间】:2012-05-04 19:19:19
【问题描述】:
我是 dapper 的新手,并计划在我的新项目中使用它。读完之后,似乎我唯一可能遇到的问题是 ConcurrentDictionary。
Dapper 缓存有关它运行的每个查询的信息,这允许它实现对象 快速处理参数。目前的实施 将此信息缓存在 ConcurrentDictionary 对象中。对象 它的存储永远不会被刷新。如果您正在生成 SQL 字符串 在不使用参数的情况下飞行,您可能会撞到内存 问题。我们可以将字典转换为 LRU 缓存。
如何避免这个问题?谁能告诉我一些代码告诉我如何以及何时刷新它?
【问题讨论】:
-
所以您正在即时生成 SQL 字符串?
-
“即时生成 SQL 字符串”是什么意思?你能给我举个例子吗?
-
SQL 字符串——您是否使用
StringBuilder动态构建它?或者它更像是一个像var sql = @"SELECT Foo FROM Bar"这样声明的常量字符串? -
我没有使用 stringbuilder,它很慢。但是我在查询中确实使用了参数:Query
("select * from Thing where Name = @Name", new {Name = new DbString { Value = "abcde", IsFixedLength = true, Length = 10, IsAnsi = true });这是否认为是即时的? -
这不是即时的,它看起来不错。我怀疑这不是您的性能问题的原因。您能否详细说明性能问题的症状?例如,当直接针对数据库服务器运行时,相同的查询是否执行得更快? (通过 SQL Server Management Studio 或其他方式)
标签: dapper concurrentdictionary