There is a listview with several fields in delphi. A thread checks and adds items to listview. If there is the same caption, an integer will be added in the subitem of this
Try a virtual Listview, using the OnData handler.
The data stays in your own data structure, the listview calls your OnData handler to get just the data items it needs whenever it needs them. i.e. You extract the particular data from your data structure when it asks.
Your other job is to keep the listview's ItemCount to the number of items in the list.