[Mono-devel-list] Re: [PATCH] StringBuilder Speedup

Ben Maurer bmaurer at ximian.com
Sat Jan 15 23:19:57 EST 2005


Forgot the patch...

On Sat, 2005-01-15 at 23:19 -0500, Ben Maurer wrote:
> Hey guys,
> 
> Attached is a patch that speeds up StringBuilder in some common cases.
> The goal of this patch is to avoid allocations of the string builder
> buffer when possible. I do this in two ways:
> 
> 1. Lazily allocate the buffer
> 
> When you create a new string builder, it will have an empty string, "",
> as the buffer. This avoids the first allocation
> 
> 2. Make the first append not allocate a buffer
> 
> Rather than allocate a buffer by the time of the first append, this just
> sets the cached string and the buffer equal to the string we get in.
> 
> 
> Doing this prevents allocations in a few common cases:
> 
> Case 1:
> 
> {
> 	StringBuilder sb = new StringBuilder ();
> }
> 
> Here, we saved allocating the buffer at all.
> 
> Case 2:
> 
> {
> 	StringBuilder sb = new StringBuilder ();
> 	sb.Append ("foo");
> 	sb.ToString ();
> }
> 
> Here, we avoided two allocations: the buffer in the string builder, and
> the string that would have been created from ToString. We just return
> the same string as was passed into append.
> 
> 
> Case 3:
> 
> {
> 	StringBuilder sb = new StringBuilder ();
> 	sb.Append ("0123456789");
> 	sb.Append ("0123456789");
> 	sb.ToString ();
> }
> 
> We saved one allocation here. The default size of a StringBuilder is 16.
> However, in the second append, it knows that this will not be large
> enough. So it is able to make its first buffer 32 chars.
> 
> 
> Doing this patch will make the behavior as compared to MSFT a bit
> different for some pendantic test cases (mostly in terms of the capacity
> property). However, I think this is a reasonable difference between two
> impls of the framework.
> 
> If nobody objects, I will check this in.
> 
> -- Ben
-------------- next part --------------
A non-text attachment was scrubbed...
Name: corlib-string-builder.patch
Type: text/x-patch
Size: 1857 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20050115/7a59a5e6/attachment.bin 


More information about the Mono-devel-list mailing list