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
There is exactly one "common wisdom" about performance - decide how fast you want process to be and measure everything, act on the data collected and repeat.
As of now your code does probably 10x memory allocations for each byte read (there are many layers of readers, string readers, and like). If you want absolute speed you likely need to eliminate most of the re-allocations. I would first rewrite code to use single reader all the way and measure if performance is good enough.