私はあなたが入力する単語の提案を与える簡単な辞書アプリを書いています。提案はListBoxに表示され、クエリが変更されるたびに約10件の提案が表示されます。Windows Phone 7 ListBoxのアイテム数が少なすぎるとListBoxのパフォーマンスが低下しますか?
残念ながら、パフォーマンスは現時点では低いです。結果が表示されるまでにはほとんどの時間がかかり、理由はわかりません。 EQATEC Profilerは私のメソッドがスムーズに実行されていることを示しています。私はStopwatchを自分のコードの周りに置くことでこれを確認しました。また、提案の数を試してみたところ、項目数が少ないほどパフォーマンスは向上しました。
これは、リストボックスのレンダリング(私の方法の外で起こると思われます)は、パフォーマンスの不足のせいだと結論づけています。
- ListBoxの10個のアイテムのレンダリングに実際に250ms以上かかるのですか?
- 画面に少数の単語をすばやく配置するにはどうすればよいですか?
編集: 私のリストボックスを埋める方法はとても簡単です。それは正しい方法ですか?
resultsListBox.Items.Clear();
foreach (string s in suggestions.Words)
{
resultsListBox.Items.Add(s);
}
resultsListBox.SelectedIndex = suggestions.MatchIndex;
ここに表示されているのは、実際のところ、デフォルトのリストボックス、文字列アイテム、テンプレートではありません。私はこれらのプリンシパルの1つに違反していますか?
- 固定サイズのコンテナ(グリッド)にアイテムデータテンプレートがあることを確認してください。
- データオブジェクトが同じ情報を簡単に提供できる場合は、複雑なコンバータを使用しないでください。
- リストボックスアイテム内のネストされた構造(リストボックスの例)を回避/除去します。
- データテンプレート内でユーザーコントロールを使用しないことを強くお勧めします。
- 回避/データテンプレートからカスタムコントロールを削除
下記のリンクは、単純なプロジェクトでのListBox性能のデモが含まれています。
このプロジェクトでは、ボタンを含むグリッドを使用してリストを表示する代わりの(より速い)方法も示しています。このリストはスクロール可能ではないので、は実際の解決策ではありません。
http://www.mediafire.com/?jypcfm4cs3nvo5c
エミュレータは非常に異なった性能を持っているため、デバイス上でプロジェクトを実行することを忘れないでください。私はサムスンオムニア7でそれをテストしました。
以下のリンクには、単純なプロジェクトでのListBoxのパフォーマンスのデモンストレーションが含まれています。 このプロジェクトでは、ボタンを含むグリッドを使用して、リストを表示する代替(より速い)方法も示しています。このリストはスクロール可能ではないので、は実際の解決策ではありません。 http://www.mediafire.com/?jypcfm4cs3nvo5c エミュレータは非常に異なった性能を持っているため、デバイス上でプロジェクトを実行することを忘れないでください。私はサムスンオムニア7でそれをテストしました。 – Matt