0

我正在我的 Windows 窗体应用程序中实现一个与 Google 一样工作的搜索功能。我已经实现了自动完成,如下所示:

private void MemberSearch()
{
    // Name Search
    ConnectionClass.GetInstance().connection_string = Properties.Settings.Default.MindMuscleConnectionString;
    ConnectionClass.GetInstance().Sql = "select MemberInfo.memberName from MemberInfo";
    DataSet ds = ConnectionClass.GetInstance().GetConnection;
    AutoCompleteStringCollection name = new AutoCompleteStringCollection();
    for (int x = 0; x < ds.Tables[0].Rows.Count; x++)
    {
        name.Add(ds.Tables[0].Rows[x].ItemArray.GetValue(0).ToString());
    }
    memberNameSearchTxtBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    memberNameSearchTxtBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
    memberNameSearchTxtBox.AutoCompleteCustomSource = name;
    // ID Search
    ConnectionClass.GetInstance().Sql = "select MemberInfo.memberID from MemberInfo";
    ds = ConnectionClass.GetInstance().GetConnection;
    AutoCompleteStringCollection id = new AutoCompleteStringCollection();
    for (int x = 0; x < ds.Tables[0].Rows.Count; x++)
    {
        id.Add(ds.Tables[0].Rows[x].ItemArray.GetValue(0).ToString());
    }
    memberIdSearchTxtBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    memberIdSearchTxtBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
    memberIdSearchTxtBox.AutoCompleteCustomSource = id;
}

问题:

虽然这种自动完成工作得很好,但我在想如果记录的数量在数百万或更多,这种方法能正常工作吗?我在表单Load事件上调用此方法。有没有更有效的方法来做到这一点?

4

1 回答 1

0

任何试图在用户输入字符时提供数百万条记录的系统都会崩溃。如果你预加载它,那就是未经过滤地访问它,它将需要很长时间和大量的 RAM 才能启动..

所以你应该尝试为你的数据添加一个衡量算法。这通常是几件事的组合。立刻想到两件事:

  • 记录被接受为正确记录的次数将添加到测量值
  • 不被接受的时间跨度将从测量值中减去

您可能想谷歌谷歌自动完成算法以获得更多想法。

而不是选择你会选择的所有东西

  • 选择order by gauge-field
  • where使用子句选择以仅获取最佳记录
  • 连续降低仪表阈值,直到结果集相当大

我假设您使用 Telerik AutoCompleteBox?访问他们的论坛也可能会有所帮助..

于 2014-06-07T08:24:00.063 回答