Effective C# 3rd 読書メモ 15 不要なオブジェクトの生成を避ける

GCは効率的に動作するが、それでも無駄なオブジェクトを作りすぎるとパフォーマンス上の悪影響が発生する。
全ての参照型は、ローカル変数であってもメモリ割り当てが行われる。
たとえば、以下のOnPaintメソッドは、PaintイベントのたびにFontのオブジェクトが生成されるため、効率が悪い。

以下のように、インスタンス変数にFontオブジェクトを保持すべきである。

一般に、参照型で、頻繁に生成されるローカル変数は、メンバー変数に格上げすべきである。

同様に、頻繁に使用されるインスタンスは、静的プロパティ等の形で取得できるようにすべきである。ここでは、以下のような遅延初期化のテクニックも利用できる。

最後にもう1つ、イミュータブルな型の変更は避けるべきである。たとえば、C#の文字列はイミュータブルである。文字列に変更を加えると、内部ではSystem.Stringの新しいインスタンスが生成されている。
文字列の組み立てには、補間文字列か、StringBuilderを使用すべきである。

補間文字列は、文字列が短い場合や、組み立てに際してロジックがほとんど必要ない場合に適している。
StringBuilderは、文字列が長い場合や、組み立てに際してロジックが必要な場合に適している。

コメントを残す