そういえば

 .NETのSubStringってどういう処理なんだろう。stringは不変だからStartIndexとLengthを変えたコピーを作るだけの処理なのか。それともいちいち新しく作ってるのか。

 ソースを見てみたけどばっちりコピーしてるな。SubString(0,length)の場合だけ自分自身を返しているようだ。