代码之家  ›  专栏  ›  技术社区  ›  Tom Pažourek

如何在没有任何dapper缓存的情况下执行sql查询?

  •  0
  • Tom Pažourek  · 技术社区  · 6 年前

    如前所述 in Dapper docs ,dapper使用 ConcurrentDictionary 存储自己的缓存,其中包含有关正在执行的查询的信息。

    dapper缓存有关它运行的每个查询的信息,这允许它快速实现对象并快速处理参数。当前实现将此信息缓存在 并发字典 反对。只使用一次的语句通常会从此缓存中刷新。尽管如此, 如果在不使用参数的情况下动态生成sql字符串,则可能会遇到内存问题 是的。


    是否有某种方法可以执行某些sql查询,以便dapper不会显式缓存它们?

    我有一些非常动态地组装的查询,使用临时表,其中包含随机标识符,字符串中内联的参数,等等。我认为在不涉及任何缓存的情况下执行这些查询是一个好主意。我知道 理想的解决方案是重写查询 以更好的方式,但我在这里寻找一个短期解决方案,同时诊断一些性能问题。我看到的一件事是 并发字典 dapper分配的内存会随着时间的推移而不断增长,不会释放。我想尝试一些东西来控制它,而不必重写很多代码。

    在dapper中是否可以这样做;只是以一种不会在缓存中结束的方式执行某些选定的查询?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Tom Pažourek    6 年前

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

    是的,但是 马上 唯一的办法就是 CommandDefinition ,例如:

    var cmdDef = new CommandDefinition("select ... blah ...",
        new { a, b }, commandType: CommandType.Text, flags: CommandFlags.NoCache);
    

    这里最重要的是 CommandFlags.NoCache 是的。有相似的 Query 采取的方法 命令定义 是的。