2

我从数据库下载了大约 5,000 张图像,它们都代表目录中的某个对象。
目录显示在 ListView ( Telerik ) 中,但我希望图像显示在每个 listview 项目旁边。

显然,有这么多图像,如果我将它们放入内存中,我肯定会耗尽内存,我什至不会尝试。

我的问题是:我 可以通过什么其他方式实现此功能?

用户可以随意滚动浏览所有项目。我想我可以在列表视图中实现页面并在页面更改时加载,但让我们把它作为最后的手段。

环境: Win 7 64bit Visual Studio 2010 pro C# Telerik WinForms

编辑 1 我被要求提供我希望它看起来如何的图像。这是一个很好的例子。就像这个图像我将能够将视图状态更改为详细信息视图或图标视图等。就像 Windows 资源管理器一样。你可以在这里找到图片:http: //imgur.com/huEw4B6

4

1 回答 1

4

你必须实现分页,没有别的办法。您可以使用:

  • Next , Previous , Page N模式。这适用于关系数据库
  • 获得更多。这适用于Count操作成本高昂的 NoSQL 数据库

从可用性的角度来看,没有人真正需要一次 5000 个项目。这就是人们发明搜索的原因。从内存管理中,您只能存储内存允许的数量。当然,交换和内存分页有一些技巧,但这并不能很好地扩展。

如果您关心实时搜索,它会变得更加复杂。

共同点

任何搜索都可以快速进行,因为数据是索引的,或者换句话说是排序的。如果数据已排序,则可以使用二分搜索,这是一种O(Log(N))操作。

客户端搜索

如果您有 5000 个项目,例如在客户端将城市作为字符串,则可以在本地缓存该数据,对其进行一次排序,然后运行快速搜索查询。

您还可以发明对图像标签的搜索并将图像标签/描述存储在内存中。

This approach is limited to small data. When you hit the limit, there is no way to scale it and you must run a search query on the server

Server side search

When you cannot use client side filtering, do it on the server. This will vastly depend on your engine. A relational database would offer an indexed column, full-text search index and similar. A NoSQL database would offer indexes (as well), secondary indexes, wide rows, full text search fields and similar.

You can ask another question including the stack you using. I would advice to stop using client side search and look for scalable server side option, as it will work on 1 MB, 1 GB, 1 TB and even on 1PB scale (though with a lot more efforts).

于 2013-04-07T20:20:13.770 回答