0

約30,000エントリのデータソース(リストタイプ)があります。

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秒必要です。フィルタタイプは「カスタム」です。私のフィルターメソッドはボトルネックではありません-'Stopwatch'クラスとパフォーマンスプロファイラーでそれをチェックしました。フィルタリングは4番目の文字の前ではありません。

少し速くする唯一の方法は、実装されたフィルター動作の代わりにTextChangedイベントを使用することです。TextChangedイベントでは、元のデータソース(Linq)をフィルター処理し、フィルター処理されたサブセットのみをAutoCompleteBoxにバインドします。

パフォーマンスを向上させるために、これから先に進む方法はありますか?または、フィルター機能を使用してデータソース(数千のエントリを含む)をAutoCompleteBoxにバインドするためのベストプラクティスは何ですか?

よろしく、ダニー

4

2 に答える 2

0
void SetData()
{
    ...
    autoCompleteBox = Data.GetRange(0, 30);
    ...
}

void autoCompleteBox_DropDownOpened(object sender, RoutedPropertyChangedEventArgs<bool> e)
{
    autoCompleteBox.ItemsSource = Data;
}
于 2012-03-29T08:08:20.270 に答える
0

非同期フィルタリングを行った方がよいでしょう。Silveright で AutoCompleteBox を使用するため
のチュートリアルhttp://www.silverlightshow.net/items/Using-the-AutoCompleteBox.aspxを次に示します。非同期フィルタリングの例があります。この例は Web サービスを使用したものですが、すでにロードされているファイルまたはコレクションからデータをロードするローカル サービスに置き換えることができます。

于 2012-02-18T06:39:53.187 に答える