2009-04-18 3 views
0

現在、Jon SkeetによってC#の深さを読み、値型と参照型について読んでいます。パラメータで多数の値型を渡すことの性能

渡されたときにその値がコピーされるため、値の型をメソッドのパラメータとして使用することのコストについて考えました。このコストは整数を考えるときにあまり重要ではありませんが、それらの値パラメータが何回も渡された文字列であればどうでしょうか。

StringBuilderクラスを使用して文字列型の代わりに渡すとメリットがありますか?

文字列が長く、たとえば1024文字であり、メソッド間で数回だけ渡されたとみなされた場合、参照値が4になる同じ値を持つStringBuilderとは対照的ですまたは毎回8バイトを追加すると、パフォーマンスが大幅に向上する可能性があります。

この質問は、String型に関して私が見逃すかもしれない重要な理解を強調しているかもしれませんが、必要に応じてこれを指摘してください。

また、各インスタンスの文字列に関するガベージコレクションにどのような影響がありますか?

編集:明らかに、私はnullとvoidを問題にする文字列に関する重要な情報を忘れてしまった。おかげでgrover。

答えて

8

文字列は値型ではなく、単なる不変オブジェクトです。

文字列を渡すと、他のオブジェクトと同じコストがかかります。参照のサイズは、Win32では4バイトです。

さらに注意:値型セマンティクス(値渡し)は、コンパイラによって最適化された方法で実装できます。私はMS JITがそれをやっている方法を見ていないが、それでも確実にそれへのポインタだけを送ることができ、ターゲットは書き込み時にコピーを作成する必要がある。

これは、Managed Operating System Alliance JIT/AOTコンパイラで行う予定です。

関連する問題