我想显示一个包含近 2000 万行的列表框(表格)。我该如何做到这一点,内存使用率较低,并且这样做时不会让我的服务器死机(停止响应)。
即使您有任何理论想法也请分享(我会尝试实施)。非常迫切需要解决方案。
我知道我不能一次加载所有行。每次滚动时,我都需要从服务器询问新行。我试过了,但我的滚动不够流畅。
谢谢和问候, 阿曼
我想显示一个包含近 2000 万行的列表框(表格)。我该如何做到这一点,内存使用率较低,并且这样做时不会让我的服务器死机(停止响应)。
即使您有任何理论想法也请分享(我会尝试实施)。非常迫切需要解决方案。
我知道我不能一次加载所有行。每次滚动时,我都需要从服务器询问新行。我试过了,但我的滚动不够流畅。
谢谢和问候, 阿曼
为什么不只检索前 100 个条目,然后一旦客户端滚动到底部,您就追加另外 100 个条目,依此类推。
也许你可以等待 ZK 的新功能。参考 http://books.zkoss.org/wiki/Small_Talks/2012/March/Handling_a_Trillion_Data_Using_ZK
您可以使用http://books.zkoss.org/wiki/ZK Developer's Reference/MVC/View/Renderer/Listbox Renderer。
public void render(Listitem listitem, Object data, int index)
首先,您可以以某种方式实现渲染,以便通过渲染方法的索引从手头的数据源获取要渲染的元素。您可以使用标准缓存(如果 Hibernate 到位)或自定义编写的缓存(另请查看EhCache)。
@Erik 解决方案的实施速度非常快。要添加,您可以制作一个按钮,以便用户知道加载更多记录会花费一些时间,并且会考虑是否真的需要加载更多。滚动可以让你的 Listbox 只是挂断片刻。
并且始终对一次显示的最大记录数设置上限 - 不要污染服务器的内存。