I've got a ListBox on my form with lots of data in it (14000 entries).
I have to put a search field on the form. As text is entered into the search
field, I want the ListBox to remove entries that do not match. Sounds simple
enough, but it is really taking a long time! I started running it before
opening my web browser, and now (with typing this message, I'm about to go
over and hit a breakpoint) it is at ... 12687 entries, and all I've entered
is one character into my filtering TextBox.
The data comes from a data table, but we add extra "readability" fields, so
it is not something that is data bound.
Why is my version taking so long?
What can I do to speed it up?
Example Code:
private void Filter(string value)
{
for (int i = ListView1.Items.Count - 1; -1 < i; i--)
{
if (ListView1.Items[i].SubItems[1].Text.StartsWith(value) == false)
{
ListView1.Items[i].Remove();
}
}
ListView1.Refresh();
}
Aside: I tried using Visual Studio's Auto Complete setting, but it didn't
work. Looking up the help, it told me that the maximum number of Auto
Complete values depends on the OS (no other information). I presume I was
over running the buffer, so it crapped out on me.