パフォーマンス (C# および Visual Basic)

パフォーマンスという用語は、プログラムの実行速度を表す一般的な用語です。 ソース コード内で特定の基本規則に従うことにより、実行速度を上げることができることもあります。 プログラムによっては、コードを綿密に調べることが重要で、プロファイラーを使用して、可能な限り速く実行しているかどうかを確認することが必要な場合もあります。 一方、記述どおりに許容可能な速度でコードが実行されているため、このような最適化が必要ないプログラムもあります。

パフォーマンスの測定と最適化を行う場合は、次の一般的なガイドラインに従ってください。

  • まず、パフォーマンスの目標値を設定し、プログラムのパフォーマンスを測定することにより、どのような場合にコードがその目標値に達しないかを判断します。

  • 最初に、コードが正しく、設計原則に従い、明確に作者の意図を表すように、コードを記述します。 パフォーマンスの目標値に達していないと判断できる場合にのみ最適化を行います。 パフォーマンスが最適化されたコードを理解したり、管理したりするのは難しいものです。 一般に、最も最適化されたコードよりも、低速ではあるが、読み込み可能で、堅牢で、保守可能なコードを記述することをお勧めします。

  • 最適化が必要な場合、まずプログラムの最も遅い部分から始めます。 プログラムがパフォーマンスの目標値に達していないと判断できる場合、パフォーマンスを改善できる部分を特定し、どのパフォーマンスの問題が主要原因となっているかを見極めます。 呼び出し頻度が低いメソッドを最適化したり、メソッド A が別のスレッドで実行されるのを 30 秒待機するようなプログラムについて、実行時間が 50 ミリ秒未満のメソッド B を最適化したりすることは通常意味がありません。

ボックス化とボックス化解除

たとえば、System.Collections.ArrayList などの非ジェネリック コレクション クラスで、頻繁に値型をボックス化する必要がある状況では、値型の使用を回避するのが最も適しています。 System.Collections.Generic.List<T> などのジェネリック コレクションを使用することで、値型のボックス化を回避できます。 ボックス化とボックス化解除は、負荷の大きい処理です。 値型をボックス化するときは、完全に新しいオブジェクトを作成する必要があります。 これには、単純な参照割り当てと比較して最大 20 倍もの時間がかかることがあります。 また、ボックス化を解除するときは、キャストのプロセスで代入の 4 倍の時間がかかることがあります。 詳細については、「ボックス化とボックス化解除」を参照してください。

Strings

たとえば、短いループ内で多くの文字列変数を連結する場合は、C# の + 演算子または Visual Basic の連結演算子ではなく、System.Text.StringBuilder を使用します。 詳細については、「方法: 複数の文字列を連結する (C# プログラミング ガイド)」および「Visual Basic の連結演算子」を参照してください。

Destructors

空のデストラクターは使用しないでください。 デストラクターがクラスに存在するときは、エントリが終了キューで作成されます。 デストラクターを呼び出すと、ガベージ コレクターが呼び出され、このキューを処理します。 デストラクターが空の場合は、これによってパフォーマンスが低下します。 詳細については、「デストラクター (C# プログラミング ガイド)」および「オブジェクトの有効期間: オブジェクトの作成と破棄 (Visual Basic)」を参照してください。

その他のリソース

参照

概念

C# プログラミング ガイド

その他の技術情報

プログラミングの概念

Visual Basic のプログラミング ガイド