Я пишу простое словарное приложение, которое дает подсказки для слов при вводе текста.Предложения отображаются в виде ListBox , и каждый раз, когда меняется запрос, должно появляться около 10 предложений.
К сожалению, в данный момент производительность низкая.Результаты появляются почти секунду, и я не понимаю, почему. EQATEC Profiler показывает, что мои методы работают без сбоев.Я подтвердил это, поместив Секундомер вокруг моего кода.Я также экспериментировал с количеством предложений, и производительность увеличивается с меньшим количеством элементов.
Это приводит меня к выводу, что отрисовка ListBox (который, как я полагаю, происходит за пределами моих методов) является причиной отсутствия.производительности.
- Действительно ли рендеринг 10 элементов в ListBox действительно занимает более 250 мс?
- Как быстро вывести на экран небольшое количество слов?
Edit: способ, которым я заполняю свой ListBox, очень прост.Это правильный путь?
resultsListBox.Items.Clear();
foreach (string s in suggestions.Words)
{
resultsListBox.Items.Add(s);
}
resultsListBox.SelectedIndex = suggestions.MatchIndex;
То, что вы видите здесь, действительно так: ListBox по умолчанию, элементы String, шаблоны отсутствуют.Нарушаю ли я один из этих принципов?
- Убедитесь, что у вас есть шаблон данных элемента в контейнере фиксированного размера (сетке).
- Избегайте / удаляйте, используя сложные конвертеры, когда та же информацияможет быть легко предоставлен объектом данных.
- Избегать / удалять вложенные структуры, пример списка в элементе списка.
- Настоятельно рекомендуется не использовать пользовательский элемент управления внутри шаблона данных.
- Избегайте / удаляйте пользовательские элементы управления из шаблона данных
Ссылка ниже содержит демонстрацию производительности ListBox в простом проекте.
В проекте также показана альтернатива(быстрее) способ отображения списка, используя сетку с кнопками.Этот список нельзя прокручивать, поэтому не является реальным решением .
http://www.mediafire.com/?jypcfm4cs3nvo5c
Не забудьте запустить проект на устройстве, поскольку эмулятор имеет очень разную производительность.Я тестировал его на Samsung Omnia 7.