2012-02-17 5 views
0

私は約30,000エントリのデータソース(Listタイプ)を持っています。大規模なデータソースを使用するとパフォーマンスに問題が発生するAutoCompleteBox

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

このソースをオートコンプリートボックスにバインドした後、入力された各文字にはフィルタ処理に約1〜3秒かかることがあります。フィルタの種類は「カスタム」です。私のフィルターメソッドはボトルネックではありません - 私は 'Stopwatch'クラスとパフォーマンスプロファイラーでチェックしました。フィルタリングは4番目の文字の前ではなく開始されます。

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

Istそこにはパフォーマンスを向上させるために何か別の方法がありますか?または、何千ものエントリを持つデータソースをフィルタ機能付きのAutoCompleteBoxにバインドするにはどうすればよいでしょうか?

敬具、 ダニー

答えて

0

あなたは非同期のフィルタリングを行う場合、それが良いだろう。
Silverlightでオートコンプリートボックスを使用するためのチュートリアルhttp://www.silverlightshow.net/items/Using-the-AutoCompleteBox.aspxがあります。非同期フィルタリングの例があります。この例ではWebサービスを使用していますが、ローカルサービスで置き換えることができます。ローカルサービスは、すでにロードしているファイルまたはコレクションからデータをロードします。

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

void autoCompleteBox_DropDownOpened(object sender, RoutedPropertyChangedEventArgs<bool> e) 
{ 
    autoCompleteBox.ItemsSource = Data; 
} 
+0

答えを少し詳しく説明すると役立ちます。 –

関連する問題