过滤数据网格 - 高效的方式

时间:2011-01-27 17:32:02

标签: .net wpf performance

在过滤数据网格的现有数据时,效率更高:

- filtering the existing data collection OR
- querying database with filter clauses

3 个答案:

答案 0 :(得分:1)

通常,对数据库进行过滤会更有效,因为数据库不仅要返回的数据较少,而且通常还要处理较少的数据(例如,它可以使用索引来减少要处理的记录数量) 。此外,在大多数基础结构中,数据库与客户端不在同一服务器上,因此还有其他资源与返回未过滤的数据有关。通常,必须处理的数据越多,对数据库进行过滤的效率就越高。

但是,显然也存在使代码/客户端中的过滤更有效的情况,主要是如果应用程序具有数据库首先必须查询的信息。

但这一切都很模糊,最终取决于你的申请。如果您说您有一个数据网格,并且用户对有关相同静态数据的过滤器进行了许多更改,则对数据库进行过滤将导致数据库服务器上出现大量不必要的流量和工作负载,而客户端上未过滤的缓存数据将提高效率。

答案 1 :(得分:1)

好的,所以你从数据库中提取了一部分数据并将其呈现给用户。一切都在世界上很棒。现在,讨厌的用户想要对数据应用进一步的过滤。假设我们没有通过游标等访问大量数据集,那么数据已经在内存中。我很想在那里过滤它们。

如果数据没有快速变化并且某种程度的陈旧性的可能性是可以接受的,那么没有充分的理由回到数据库来提取已有的数据的子集。你已经通过电线拉过数据一次,为什么再这样做。

如果数据确实需要更新,那就忘记我刚刚说过的所有内容,然后向DB询问。

这个想法可能介于数据访问层之间。在这里,您将监视数据时间并确保即使用户只是持续更改同一数据集的过滤数小时,它也会定期从数据库中刷新。过滤数据的请求也应该呈现给这一层,这样你的应用程序就无论是实际获取还是仅从内存提供服务都是盲目的。如果您决定一种或另一种方法(内存或数据库)实际上总是更好,因为您将能够更改底层代码并保持应用程序不变,那么关注点的分离将使您顺利前进。

答案 2 :(得分:0)

绝对过滤现有数据集。

有几种解决方案可以过滤现有的DataGridCollection,但在我看来,最好的解决方案是只使用标准WPF DataGrid控件的样式,而不会发明新的继承DataGird类型或依赖在另一个第三方控制。以下是我发现的最佳解决方案: