好的,首先让我说我从未使用过此控件,这也是我第一次尝试使用Web服务。
我的困境如下。我需要查询数据库以获取某个列并将其用于我的自动完成。显然我不希望每次用户在文本框中键入另一个单词时运行查询,所以我最好的猜测是运行查询一次然后使用该数据集,数组,列表或其他任何内容然后过滤自动完成扩展程序。 。
我有点失去了任何建议吗?
答案 0 :(得分:2)
此问题取决于您的数据存储的事务处理方式。显然,如果您正在寻找美国州(数据集合在应用程序的生命周期中不会实际变化),那么我要么缓存System.Collection.Generic List<>输入或者如果你想要一个DataTable。
您可以轻松地设置要查询的数据的缓存,使其依赖于XML文件或数据库,以便扩展程序始终查询从缓存中转换的数据对象,并且仅在数据源更改时更新缓存对象
答案 1 :(得分:2)
为什么不跟踪用户在会话变量中执行的查询,然后使用它来过滤任何进一步的结果?
阻止数据库过载的诀窍我认为只是限制自动更新程序被允许更新的频率,类似于每2秒一次对我来说似乎是合理的。
我要做的是:存储查询返回的当前列表,用于单词A服务器端,并将其与会话变量联系起来。这基本上应该是我想的整个列表。然后,对于键入的每个新单词,只要原始单词A存在,您就可以过滤会话信息并将过滤后的结果吐出,而无需再次查询。所以基本上,只有在单词A改变时再次查询。
我在PHP意义上使用“session”,你可能使用不同术语的不同语言,但概念应该是相同的。
答案 2 :(得分:1)
RAM很便宜,SQL比IIS更难扩展,因此将所有内容缓存在内存中:
根据您的自动填充所需的行为和性能,您可能希望预先计算数据并创建针对阅读优化的冗余结构。利用像SortedList这样的结构(当你需要像'选择顶部x ...其中z喜欢@query +'%'时),Hashtable,......
答案 3 :(得分:0)
虽然缓存所有内容当然是一个好主意,但您对使用哪种数据结构的问题是一个尚未完全回答的问题。 自动完成扩展器的最佳数据结构是Trie。 你可以找到一篇好的.NET文章和代码here。