我有一个查询数据库记录的应用程序。记录可能有数千个,这可能会增加进程的内存并最终导致崩溃或响应缓慢。
分页查询是一种解决方案,但记录中的信息总是不断变化。因此,为了提供独特的体验,我们被迫显示用户进行查询时可用的信息。
使用分页可以在从一个页面移动到另一个页面时动态更新内容。我相信客户端缓存可以解决这个问题。
我发现的一种方法是以 XML 格式将结果存储到磁盘并使用 LINQ to XML 进行查询。是否有任何经过验证的客户端缓存机制可以与桌面应用程序(而不是 Web)一起使用
查看一些模式,例如http://msdn.microsoft.com/en-us/library/ff664753 它讨论了企业库缓存应用程序块的使用,它允许开发人员在他们的应用程序中合并本地缓存。
另请阅读http://www.codeproject.com/Articles/8977/Using-Cache-in-Your-WinForms-Applications
企业库 5.0 可以在这里找到http://msdn.microsoft.com/en-us/library/ff632023
除非您让缓存无限增长,否则内存使用应该不是真正的问题。预取太多用户可能永远不会看到的页面,或者保留用户很长时间没有查看的页面几乎没有什么好处。动态获取下一个/上一个页面可以保持高性能,但您应该从缓存页面中清除已编辑或超过某个时间跨度的页面。从缓存中清除只需要丢弃对页面的所有引用(例如从任何列表或字典中删除它)并允许垃圾收集器完成它的工作。
您还可以潜在地将WeakReference存储到您的对象,并让垃圾收集器在需要时收集您的对象,但这使您对什么是未缓存的控制较少。
或者,有一些非常好的第三方解决方案,特别是如果它是一个网格控件。DevExpress 网格控件具有出色的服务器模式,可以以良好的性能处理非常大的数据集。