Attached patch grows a memory stream by at least a quarter of its original 
capacity.

Vincent
Index: streams.inc
===================================================================
--- streams.inc	(revision 5577)
+++ streams.inc	(working copy)
@@ -535,11 +535,17 @@
 function TMemoryStream.Realloc(var NewCapacity: Longint): Pointer;
 
 begin
-  // round off to block size.
+
   If NewCapacity<0 Then
     NewCapacity:=0
   else  
-    NewCapacity := (NewCapacity + (TMSGrow-1)) and not (TMSGROW-1);
+    begin
+      // if growing, grow at least a quarter
+      if (NewCapacity>FCapacity) and (NewCapacity < (5*FCapacity) div 4) then
+        NewCapacity := (5*FCapacity) div 4;
+      // round off to block size.
+      NewCapacity := (NewCapacity + (TMSGrow-1)) and not (TMSGROW-1);
+    end;
   // Only now check !
   If NewCapacity=FCapacity then
     Result:=FMemory
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to