Thanks Jon for the detailed explanation. Much appreciated. On Thu, Jun 28, 2012 at 7:37 PM, Jonathan Pryor <j...@xamarin.com> wrote:
> On Jun 28, 2012, at 4:10 AM, Matthew Leibowitz wrote: > > Although this won't solve your problem, string + string is a bad > practice. It is better to use a StringBuilder: > > string.operator+() _may_ be a bad practice. In this case, it is NOT a bad > practice; it is fine. > > Specifically, StringBuilder is amortized O(n), so it may need to resize > the internal buffer, allocating more memory. > > string.operator+, on the other hand, has two compiler features: > > 1. String constants are concatenated at compile-time. This expression: > > "a" + "b" + "c" > > is translated by the compiler into: > > "abc" > > 2. When concatenating non-constant strings, all of them are passed to > string.Concat() at once, and string.Concat() is able to allocate a buffer > large enough to store _all_ the strings at once, no resize needed. This > expression: > > Name + "\n" + Unit + "\n" + AddressLine1 > > is generated as: > > string.Concat (Name, "\n", Unit, "\n", AddressLine1) > > StringBuilder will ~always have "slack"/extra memory involved. > String.Concat() never will...for the expression it's involved with. > > Thus the real question when comparing string.operator+ to StringBuilder is > whether you have "intermediate named temporaries," for example with loops. > If you're using a (non-compiler-generatd) "temporary" variable, you should > normally prefer StringBuilder; > > // BAD > string val = ""; > for (int i = 0; i < 1000; ++i) > val += i + " "; > return val; > > // GOOD > var sb = new StringBuilder(); > for (int i = 0; i < 1000; ++i) > sb.Append (i).Append (" "); > return sb.ToString (); > > - Jon > > _______________________________________________ > Monodroid mailing list > Monodroid@lists.ximian.com > > UNSUBSCRIBE INFORMATION: > http://lists.ximian.com/mailman/listinfo/monodroid >
_______________________________________________ Monodroid mailing list Monodroid@lists.ximian.com UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid