The standard ListView control has a virtual mode designed specifically for your situation. I used it with a million list of strings earlier and it does a good job.
This is a true virtual mode. In other words, the memory allocation and population time of the list remain low regardless of the size of the general list. This is not like a DataGridView, which is really starting to slow down and uses memory in large lists.
To use a set of virtual modes:
VirtualListMode = true VirtualListSize= 300000
(or any other size of your list now)
Then fire the RetrieveVirtualItem event to populate the on-demand list from your list. You can also handle CacheVirtualItems and SearchForVirtualItem events.
source share