[Mono-devel-list] String Allocation in StringBuilder.AppendFormat

Paolo Molaro lupus at ximian.com
Wed Aug 20 09:10:12 EDT 2003


On 08/20/03 Ben Maurer wrote:
> Looking at the StringBuilder.AppendFormat code, it just does:
> 	Append (String.Format (...));
> 
> Inside the Format code, a new StringBuilder is allocated to handle the
> formatting.
[...]
> I suggest that we move the format parsing logic to StringBuilder.

I don't see any reason to move the code around. Just change the current
String.Format to an internal method String.FormatHelper that takes
an additional argument, a StringBuilder. This way it can be used
directly by the StringBuilder.AppendFormat functions and String.Format
becomes:

	StringBuilder s = new StringBuilder ();
	FormatHelper (s, ...);
	return s.ToString ();

> One other, related, idea is to eliminate the allocation of the
> StringBuilder in TextWriter.Write (string, object []). Instead of
> calling String.Format (and thus allocating a StringBuilder), we could
> make a private overload that would take in a TextWriter. We could then
> make a formatter that used TextWriter.Writer, rather than
> StringBuilder.Append to write out the values.

I don't think that will be a win in practice: you're just saving two
allocations that in the context of the Format code are probably
just a small part and you're going to have code duplication and pay for
more TextWriter calls that may be potentially expensive (synchronized,
writes to disk etc).

lupus

-- 
-----------------------------------------------------------------
lupus at debian.org                                     debian/rules
lupus at ximian.com                             Monkeys do it better



More information about the Mono-devel-list mailing list