次の方法で共有


パフォーマンスの警告

パフォーマンスの警告は、高パフォーマンスのライブラリとアプリケーションをサポートします。

このセクションの内容

規則

Description

CA1800: 不必要にキャストしません

二重のキャストがあるとパフォーマンスが低下します。特に、小さな繰り返しステートメントでキャストが実行される場合はそうです。

CA1801: 使用されていないパラメーターを再確認します

メソッドのシグネチャに、メソッドの本体で使用されていないパラメーターがあります。

CA1802: 適切な場所にリテラルを使用します

フィールドが static および read-only (Visual Basic では Shared および ReadOnly) として宣言され、コンパイル時に計算できる値によって初期化されています。対象フィールドに代入された値はコンパイル時に計算できるので、宣言を const (Visual Basic では Const) フィールドに変更して、値が実行時ではなくコンパイル時に計算されるようにします。

CA1804: 使用されていないローカルを削除します

使用されていないローカル変数や不要な引数があると、アセンブリのサイズが大きくなり、パフォーマンスが低下します。

CA1806: メソッドの結果を無視しない

新しく作成されたオブジェクトが現在まで使用されていないか、新しい文字列を作成して返すメソッドが呼び出されて作成された新しい文字列が現在まで使用されていません。あるいは、コンポーネント オブジェクト モデル (COM: Component Object Model) または P/Invoke メソッドから返された HRESULT またはエラー コードが現在まで使用されていません。

CA1809: ローカルを使用しすぎないでください

パフォーマンス最適化の一般的な方法として、メモリではなくプロセッサのレジスタに値を格納する方法があります。これは "値のレジスタ格納" と呼ばれます。すべてのローカル変数をレジスタ格納できるようにするには、ローカル変数の数を 64 個に制限します。

CA1810: 参照型の静的フィールドをインラインで初期化します

型で明示的な静的コンストラクターを宣言すると、Just-In-Time (JIT) コンパイラが、静的コンストラクターが呼び出されたことを確認するために、型の静的メソッドと静的インスタンス コンストラクターに個別にチェックを追加します。静的コンストラクターのチェックによってパフォーマンスが低下することがあります。

CA1811: 呼び出されていないプライベート コードを使用しません

プライベート メンバーまたは内部 (アセンブリ レベル) メンバーが、アセンブリ内において、また共通言語ランタイムおよびデリゲートのいずれからも呼び出されていません。

CA1812: インスタンス化されていない内部クラスを使用しないでください

アセンブリ レベルの型のインスタンスが、アセンブリ内のコードから作成されません。

CA1813: シールされていない属性を使用しません

.NET Framework クラス ライブラリには、カスタム属性を取得するメソッドが用意されています。既定では、これらのメソッドで属性の継承階層が検索されます。属性をシールすると、継承階層の全体が検索されなくなるため、パフォーマンスが向上します。

CA1814: 複数次元の配列ではなくジャグ配列を使用します

ジャグ配列とは、その要素も配列である配列です。要素を構成する配列のサイズは異なってもよいため、データ セットによっては無駄な空間が少なくなります。

CA1815: equals および operator equals を値型でオーバーライドします

値型の場合、Equals を継承した実装が Reflection ライブラリを使用して、すべてのフィールドの内容を比較します。Reflection は計算コストが高いため、場合によってはすべてのフィールドで等値性を比較する必要はありません。ユーザーがインスタンスの比較または並べ替えを行うことや、ハッシュ テーブル キーとしてインスタンスを使用することが予想される場合には、値型に Equals を実装する必要があります。

CA1816: GC.SuppressFinalize を正しく呼び出します

Dispose を実装するメソッドが GC.SuppressFinalize を呼び出していないか、Dispose を実装しないメソッドが GC.SuppressFinalize を呼び出しています。または、あるメソッドが GC.SuppressFinalize を呼び出し、this (Visual Basic では Me) 以外のオブジェクトを渡しています。

CA1819: プロパティは、配列を返すことはできません

プロパティが読み取り専用であっても、プロパティで返される配列は書き込みから保護されません。配列の改ざんを防ぐには、プロパティで配列のコピーを返す必要があります。一般に、このようなプロパティを呼び出すときのパフォーマンス低下は理解されません。

CA1820: 文字列の長さを使用して空の文字列をテストします

String.Length プロパティまたは String.IsNullOrEmpty メソッドを使用して文字列を比較する方法は、Equals を使用する場合よりもはるかに高速です。

CA1821: 空のファイナライザーを削除します

オブジェクトの有効期間の追跡に関連するパフォーマンス オーバーヘッドが増大するため、ファイナライザーは可能な限り使用しないでください。空のファイナライザーを使用すると、オーバーヘッドが増大するだけで何の利点もありません。

CA1822: メンバーを static に設定します

インスタンス データにアクセスしない、またはインスタンス メソッドを呼び出さないメンバーは、静的 (Visual Basic では共有) としてマークできます。メソッドを静的としてマークすると、コンパイラはこれらのメンバーに対する非仮想呼び出しサイトを出力します。パフォーマンス重視のコードでは、これにより大きくパフォーマンスを向上できます。

CA1823: 使用されていないプライベート フィールドを使用しません

アセンブリ内でアクセスされていないと思われるプライベート フィールドが検出されました。

CA1824: アセンブリを NeutralResourcesLanguageAttribute に設定します

NeutralResourcesLanguage 属性は、ResourceManager に対し、アセンブリのニュートラル カルチャのリソースを表示するために使用した言語を通知します。これにより、読み込んだ最初のリソースに対する検索のパフォーマンスが向上し、ワーキング セットを縮小できます。