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;
}

質問:

このオートコンプリートは問題なく機能しますが、レコード数が数百万件以上の場合、この方法で問題ないのではないかと考えています。FormLoadイベントでこのメソッドを呼び出しています。これを行うより効率的な方法はありますか?

4

1 に答える 1

0

ユーザーが文字を入力している間に何百万ものレコードを提供しようとするシステムは機能しなくなります。そして、それをプリロードする場合、つまり、フィルタリングされていない状態でアクセスすると、起動するのに時間がかかり、大量の RAM が必要になります..

したがって、測定アルゴリズムをデータに追加してみてください。これは通常、いくつかのものの組み合わせになります。すぐに思いつくのは次の 2 点です。

  • レコードが正しいものとして受け入れられた回数がゲージ値に追加されます
  • 受け入れられない期間は、ゲージ値から差し引かれます

より多くのアイデアを得るために、 Google のオートコンプリート アルゴリズムをグーグルで検索することをお勧めします。

すべてを選択する代わりに

  • で選ぶorder by gauge-field
  • where最良のレコードのみを取得する句で選択します
  • 結果セットが適度に大きくなるまで、ゲージのしきい値を連続的に下げます

Telerik AutoCompleteBox を使用していると思いますか? 彼らのフォーラムへの訪問も役立つかもしれません..

于 2014-06-07T08:24:00.063 に答える