У меня есть элемент управления texbox в моем приложении wpf, где я хочу получать список автозаполнения при вводе пользователем. Другими словами, у меня есть что-то вроде окна поиска Google:
Мне удалось сделать это двумя способами, и я хотел бы знать, какой из них более эффективен.
Первый способ:
КакПользователь вводит текстовое поле каждый раз, когда изменяется текстовое поле. Я обновляю список, запрашивая базу данных.поэтому у меня есть что-то вроде:
void textBox1_KeyUp(object sender, KeyEventArgs e)
{
// new text
var content = ((TextBox)sender).Text;
// I am selecting the posible items using ado.net
var posibleItems= PdvEntities.Entities.TableFoos.Where(TableFoo=> TableFoo.Description.Contains(content)).Select(c=>c);
listbox1.ItemsSource = posibleItems;
}
обратите внимание, что при таком подходе я буду запрашивать базу данных каждый раз, когда в этом текстовом поле запускается событие keyup.
Второй способ:
Вместо того, чтобы запрашивать базу данных каждый раз, когда происходит событие keyup, я делаю следующее:
// select all items and store that as a global variable
IQueryable allItems = PdvEntities.Entities.TableFoos.Select(a => a);
void textBox1_KeyUp(object sender, KeyEventArgs e)
{
// new text
var content = ((TextBox)sender).Text;
// I don't have the code but I will then filter variable
// allItems based if their description contains 'content'
// pseudo code
newFileter <- filter of allItems that contain content
listbox1.ItemsSource = newFileter;
}
не так, что в этом случае я запрашиваю базу данных только один раз, и каждый раз, когда мне нужно добавить элементы в список, я буду запрашиватьпеременная IQueryable вместо базы данных.Я боюсь, что если база данных будет слишком большой, эта техника будет занимать много памяти.
Также я забыл упомянуть, что база данных может быть не локальной.Сейчас я подключаюсь к базе данных локально, но это приложение может работать с удаленным подключением к базе данных.Какой подход более эффективен?