title: Quick padding of a string in Delphi
body: <p>I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "misc"-unit:</p>
  
  <pre><code>function cwLeftPad(aString:string; aCharCount:integer; aChar:char): string;
  var
    i,vLength:integer;
  begin
    Result := aString;
    vLength := Length(aString);
    for I := (vLength + 1) to aCharCount do    
      Result := aChar + Result;
  end;
  </code></pre>
  
  <p>In the part of the program that I'm optimizing at the moment the method was called ~35k times, and it took a stunning 56% of the execution time! </p>
  
  <p>It's easy to see that it's a horrible way to left-pad a string, so I replaced it with</p>
  
  <pre><code>function cwLeftPad(const aString:string; aCharCount:integer; aChar:char): string; 
  begin
    Result := StringOfChar(aChar, aCharCount-length(aString))+aString;
  end;
  </code></pre>
  
  <p>which gave a significant boost. Total running time went from 10,2 sec to 5,4 sec. Awesome! But, cwLeftPad still accounts for about 13% of the total running time. Is there an easy way to optimize this method further? </p>