But why did you copy that on a temporary file? You can just keep it in memory. You can associate with each list item "data", which is actually a numerical value, and can be a pointer. You can store your 4000 bytes for each item in memory, and associate with the item the pointer to that memory. You only have to make sure, when you clear the list, you iterate through the items and delete that memory.

See SetItemData() and GetItemData().