Stringbuilder has a very particular use pattern and it is ideal if it can be used without creating garbage
Therefore a plausible hypothetical optimization would be to have Stringbuilder backed by an unmanaged, VM-owned object, and to have these objects live in pools. Create a StringBuilder, it comes out of the pool, when it Finalizes it goes back in the pool. This object would probably need to be as large as it's largest allocation