【问题标题】:How to execute a SQL query without any Dapper caching?如何在没有任何 Dapper 缓存的情况下执行 SQL 查询?
【发布时间】:2018-12-17 11:16:05
【问题描述】:

in Dapper docs 所述,Dapper 使用ConcurrentDictionary 来存储自己的缓存以及有关正在执行的查询的信息。

Dapper 缓存有关它运行的每个查询的信息,这使其能够快速实现对象并快速处理参数。当前实现将此信息缓存在ConcurrentDictionary 对象中。只使用一次的语句通常会从此缓存中刷新。不过,如果您在不使用参数的情况下即时生成 SQL 字符串,您可能会遇到内存问题


是否有某种方法可以执行某些 SQL 查询,以便它们不会被 Dapper 明确缓存?

我有一些非常动态组装的查询,使用带有随机标识符的临时表,字符串中内联的参数等。我认为执行这些查询而不涉及任何缓存是个好主意。我知道理想的解决方案是以更好的方式重写查询,但我正在这里寻找一个短期解决方案,同时诊断一些性能问题。我正在查看的一件事是 Dapper 分配的 ConcurrentDictionary 内存随着时间的推移不断增长并且没有被释放。我想尝试一些方法来控制它,而不必重写大量代码。

在 Dapper 中是否有可能?只是为了以某种方式执行某些选定的查询,它们不会最终进入缓存?

【问题讨论】:

    标签: c# performance caching dapper


    【解决方案1】:

    在这里没有得到答案后,我问了again on Github issues,并从 Marc Gravell 那里得到了这个答案:

    是的,但是现在唯一的方法是通过CommandDefinition,例如:

    var cmdDef = new CommandDefinition("select ... blah ...", 新的 { a, b },命令类型:CommandType.Text,标志:CommandFlags.NoCache);

    这里的重要一点是CommandFlags.NoCache。有类似的Query等方法采用CommandDefinition

    【讨论】:

      猜你喜欢
      • 2014-07-30
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 2015-03-17
      • 1970-01-01
      • 2019-06-17
      相关资源
      最近更新 更多