Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why doesn't C#'s String.Join use StringBuilder at one point? [duplicate]

As can be seen here, one of String.Join's overloads works with raw pointers and uses something called UnSafeCharBuffer. Why is this? Is it a performance optimization?

like image 254
NetherGranite Avatar asked Jan 17 '19 21:01

NetherGranite


Video Answer


1 Answers

Is a performance optimization?

Yes.

In general you should expect that unsafe code is either for low-level unmanaged language interop or for performance optimization. In this case it is the latter.

This then suggests the question:

Why not use the same techniques for StringBuilder?

Different scenarios can be tuned using different optimization techniques; StringBuilders are optimized for their scenarios.

The scenarios are different in several ways. Join knows ahead of time exactly how many bytes will be returned; StringBuilder does not. Join knows that the resulting string will be generated exactly once, but a StringBuilder has to support the create, append, ToString, append, ToString, ... workflow efficiently. And so on.

like image 132
Eric Lippert Avatar answered Nov 08 '22 00:11

Eric Lippert