【发布时间】:2026-01-28 00:40:02
【问题描述】:
我正在使用 jquery 数据表来显示一个网格,该网格使用 webapi 来检索它的数据。 webapi 使用 linq 来查询 mssql 数据库,它巧妙地使用过滤、排序和跳过/获取来在包含大约一百万条记录(并且还在增长)的索引良好的表上组装它的查询。一个常见的场景。
而且它的表现非常好。浏览器必须等待大约 50 毫秒才能返回响应(例如在分页时)。
但是,在我使用分析工具查看后,我注意到仅选择表的总行数大约需要 25 毫秒。我想知道,因为我希望数据表显示如下内容:“显示从 1.000.000 中过滤出来的 45.000 的第 1 到 10 行”需要总数。
我实际上不需要知道来自服务器的每次行程的精确总计数(它只是提供信息),所以我也许可以保留价值服务器端并在不同的任务中每秒刷新它,而不会干扰数据检索的数据表。我只会返回总行数的“足够接近”的值。
是否有可靠的机制?我尝试将总行数放在多个用户在多个回调期间使用的静态中,并且每次请求它时都会触发异步任务来刷新它。
这感觉很恶心,但是,共享静态内容并进行不同的线程更新对我来说并不是那么稳定。我查看了 SqlDependency 以在每次从我的数据更改到我的域模型时推送记录计数,但这似乎不支持 SELECT COUNT(Id) FROM TABLE 方案。
有什么想法吗?
【问题讨论】:
-
使用绝对过期的MemoryCache 条目怎么样?
-
当然,在 Web 场景中比静态更好。我同意,但是如何以稳定的方式更新它。
-
“稳定”是什么意思?更新的一种选择是使用
CacheItemPolicy添加它,其中包括一个RemovedCallback,这将使调用再次获取计数。 -
将绝对到期时间设置为约 1 秒是否有效?我需要最新的值始终可用,即使它正在刷新它。当我对 removecallback 采取行动时,我会说这个值已经消失了。对吗?
-
是的,这只是我想到的第一件事,可能不适用于您的具体情况。
标签: c# asp.net-web-api datatables