Преглед изворни кода

* Patch from Vincent Snijders to grow memory stream by a quarter of its size

git-svn-id: trunk@5581 -
michael пре 18 година
родитељ
комит
2eda10c74c
1 измењених фајлова са 8 додато и 2 уклоњено
  1. 8 2
      rtl/objpas/classes/streams.inc

+ 8 - 2
rtl/objpas/classes/streams.inc

@@ -535,11 +535,17 @@ end;
 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