It is known that if you read data from disc you are IO bound and you can process/parse the read data much faster than you can read it from disc.
But this common wis
Just couple of suggestions (if you are willing to live with more complicated implementation)...
LinkedList instead of List to avoid re-allocation/copy when Add-ing.Split with handwritten code that searches for separator and then uses Substring to extract the "fields". You only need to search for a single separator and number of fields is known in advance, so Split is too general for you.Read instead of ReadLine so you can re-use the same buffer and avoid allocating new string for every line.Tasks. While you are at it, put the file reading into its own task as well.