.NET のパフォーマンスに関するヒント

パフォーマンスという用語は、プログラムの実行速度を表す一般的な用語です。 ソース コード内で特定の基本規則に従うことにより、実行速度を上げることができることもあります。 プログラムによっては、コードを綿密に調べることが重要で、プロファイラーを使用して、可能な限り速く実行しているかどうかを確認することが必要な場合もあります。 一方、記述どおりに許容可能な速度でコードが実行されているため、このような最適化が必要ないプログラムもあります。 ここでは、パフォーマンスの低下が発生する一般的な状況と、パフォーマンスを向上させるためのヒント、およびパフォーマンスに関する追加のトピックについて説明します。 パフォーマンスの計画と計測の詳細については、「Performance」(パフォーマンス) を参照してください。

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

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

文字列

たとえば、短いループ内で多くの文字列変数を連結する場合は、C# の + 演算子または Visual Basic の連結演算子ではなく、System.Text.StringBuilder を使用します。 詳細については、複数の文字列を連結する方法に関する記事と「Visual Basic の連結演算子」を参照してください。

ファイナライザー

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

その他の参照情報

関連項目