【问题标题】:AutoCompleteBox with performance issue using large data source使用大型数据源时出现性能问题的 AutoCompleteBox
【发布时间】:2012-02-17 10:22:28
【问题描述】:

我有一个包含大约 30'000 个条目的数据源(List 类型)。

public class LocationItem
{
    public string Name { get; set; };
    public double Latitude { get; set; };
    public double Longitude { get; set; };
    public double Height { get; set; };
}

将此源​​绑定到我的 AutoCompleteBox 后,每个输入的字母需要大约 1-3 秒来过滤。过滤器类型为“自定义”。我的过滤方法不是瓶颈——我使用“秒表”类和性能分析器检查了这一点。过滤不在第四个字符之前开始。

更快一点的唯一替代方法是使用 TextChanged 事件而不是实现的过滤器行为。在 TextChanged 事件中,我过滤原始数据源 (Linq) 并将过滤后的子集绑定到 AutoCompleteBox。

有没有其他方法可以提高性能?或者将数据源(具有数千个条目)绑定到具有过滤功能的 AutoCompleteBox 的最佳做法是什么?

亲切的问候, 丹尼

【问题讨论】:

    标签: windows-phone-7 autocompletebox


    【解决方案1】:

    如果你执行异步过滤会更好。
    这是在 Silveright 中使用 AutoCompleteBox 的教程 http://www.silverlightshow.net/items/Using-the-AutoCompleteBox.aspx。有一个异步过滤的例子。该示例使用 Web 服务,但您可以将其替换为本地服务,该服务从您已经加载的文件或集合中加载数据。

    【讨论】:

      【解决方案2】:
      void SetData()
      {
          ...
          autoCompleteBox = Data.GetRange(0, 30);
          ...
      }
      
      void autoCompleteBox_DropDownOpened(object sender, RoutedPropertyChangedEventArgs<bool> e)
      {
          autoCompleteBox.ItemsSource = Data;
      }
      

      【讨论】:

      • 更好地解释你的答案会有所帮助。
      猜你喜欢
      • 2019-06-29
      • 2019-04-23
      • 1970-01-01
      • 2021-01-05
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多