【发布时间】:2018-12-17 11:16:05
【问题描述】:
如in Dapper docs 所述,Dapper 使用ConcurrentDictionary 来存储自己的缓存以及有关正在执行的查询的信息。
Dapper 缓存有关它运行的每个查询的信息,这使其能够快速实现对象并快速处理参数。当前实现将此信息缓存在
ConcurrentDictionary对象中。只使用一次的语句通常会从此缓存中刷新。不过,如果您在不使用参数的情况下即时生成 SQL 字符串,您可能会遇到内存问题。
是否有某种方法可以执行某些 SQL 查询,以便它们不会被 Dapper 明确缓存?
我有一些非常动态组装的查询,使用带有随机标识符的临时表,字符串中内联的参数等。我认为执行这些查询而不涉及任何缓存是个好主意。我知道理想的解决方案是以更好的方式重写查询,但我正在这里寻找一个短期解决方案,同时诊断一些性能问题。我正在查看的一件事是 Dapper 分配的 ConcurrentDictionary 内存随着时间的推移不断增长并且没有被释放。我想尝试一些方法来控制它,而不必重写大量代码。
在 Dapper 中是否有可能?只是为了以某种方式执行某些选定的查询,它们不会最终进入缓存?
【问题讨论】:
标签: c# performance caching dapper