@Andru
I totally agree with you about dynamic arrays. I mean which idiot though about idea that best solution to increase the size of dynamic array is to double it's size?
Imagine this: You have a byte array with 1024 items in it (using 1 KB of memory) and then you add just one item to it and it's size is doubled. Imagine that you have 1GB sized array and you add one new item. Utter stupidity.

Have you ever sonsidered using TMemoryStream?
You would probably want to override the Read/Write mothods so that you won't need to specify current position using before calling them but include the position as aditional parameter. I belive it could be done and it should provide quite good performance.