I assume the listbox is flashing and redrawing as you enter each and every string
You are supposed to send a WM_SETREDRAW message to the listbox with a setting of FALSE to stop it redrawing and then when it is loaded another WM_SETREDRAW to TRUE
http://msdn.microsoft.com/en-us/library/windows/desktop/dd145219%28v=vs.85%29.aspx[
^]
Try that and see how much of the slow down is from the redraw flashing.
In reality if you have that many strings I would do an owner draw listbox and simply pass in a pointer to all the string data it seems rather silly to make windows restore all the strings and use more memory when you clearly have all the strings already in a memory block or structure.
The redraw would therefore be almost instant as it simply has to draw the visible strings to screen and exit.
There are plenty of articles on owner draw listboxes try searching "Owner Drawn listbox without strings"