Thanks for the great demo, really appreciate it!
Quote Originally Posted by Arjay View Post
The virtual list control gets it's data from a std::list and the list is populated from a 2nd thread.
This caught my eye, I normally don't use std::list with listivew because link list can't be accessed via index unlike std::vector and your code indeed use std::vector as I expected.

Quote Originally Posted by Arjay View Post
Code:
 
    ctlList.SetItemText(iItem, 0, LPSTR_TEXTCALLBACK);
    ctlList.SetItemText(iItem, 1, LPSTR_TEXTCALLBACK);
    ctlList.SetItemText(iItem, 2, LPSTR_TEXTCALLBACK);

I actually don't use this in my code because it is handled by LVN_GETDISPINFO handler anyways. I commented this in your project and works fine too without it.

Quote Originally Posted by Igor Vartanov View Post
The question is: do you or don't you use virtual list?
I think I might be confused with terminology here, more on this below. I took the opportunity to compared my project performance with Arjay's demo project. Here are the results.

My computer takes about 2 seconds to load/populate 7000 rows in Arjay's project.

My own project takes about 2.5 seconds to load 7000 rows from a file I have on disk.

Now the demo project as you see has only 3 columns and my listview has 35 columns. The demo project is not reading any disk file but I am also parsing 27MB file during this time. This makes me pretty happy about my results.

My loading mechanism is actually very similar to Arjay's project but I keep all the list data in CPtrArray instead of std::vector. Makes me think if I am already using virtual list without really know the terminology? All I know is I am definetely not using owner drawn listview style.