Nun bleibt die frage, wie bekomme ich vor dem Speichern die grösse vom VirtualTree raus?
Indem du es vorher testweise abspeicherst?
Du könnstes dir einen TMemoryStream ableiten und dort das SetSize (automatische Vergrößerung) so optimieren, daß es nicht für jedem kleinen Schreibzugriff macht, sondern auch gleich mehr reserviert.
PS: Neueres Delphi kaufen (dort ist das schon drin) oder FastMM nutzen.
Das ist nicht nur schneller, sondern hat soeine Funktion schon eingebaut, samt InplaceRealloc, so daß nicht bei jeder kleinen Größenänderung der gesamte Speicherblock kopiert wird.