パフォーマンスの警告
パフォーマンスの警告は、高パフォーマンスのライブラリとアプリケーションをサポートします。
このセクションの内容
規則 |
Description |
---|---|
二重のキャストがあるとパフォーマンスが低下します。特に、小さな繰り返しステートメントでキャストが実行される場合はそうです。 |
|
メソッドのシグネチャに、メソッドの本体で使用されていないパラメーターがあります。 |
|
フィールドが static および read-only (Visual Basic では Shared および ReadOnly) として宣言され、コンパイル時に計算できる値によって初期化されています。対象フィールドに代入された値はコンパイル時に計算できるので、宣言を const (Visual Basic では Const) フィールドに変更して、値が実行時ではなくコンパイル時に計算されるようにします。 |
|
使用されていないローカル変数や不要な引数があると、アセンブリのサイズが大きくなり、パフォーマンスが低下します。 |
|
新しく作成されたオブジェクトが現在まで使用されていないか、新しい文字列を作成して返すメソッドが呼び出されて作成された新しい文字列が現在まで使用されていません。あるいは、コンポーネント オブジェクト モデル (COM: Component Object Model) または P/Invoke メソッドから返された HRESULT またはエラー コードが現在まで使用されていません。 |
|
パフォーマンス最適化の一般的な方法として、メモリではなくプロセッサのレジスタに値を格納する方法があります。これは "値のレジスタ格納" と呼ばれます。すべてのローカル変数をレジスタ格納できるようにするには、ローカル変数の数を 64 個に制限します。 |
|
型で明示的な静的コンストラクターを宣言すると、Just-In-Time (JIT) コンパイラが、静的コンストラクターが呼び出されたことを確認するために、型の静的メソッドと静的インスタンス コンストラクターに個別にチェックを追加します。静的コンストラクターのチェックによってパフォーマンスが低下することがあります。 |
|
プライベート メンバーまたは内部 (アセンブリ レベル) メンバーが、アセンブリ内において、また共通言語ランタイムおよびデリゲートのいずれからも呼び出されていません。 |
|
アセンブリ レベルの型のインスタンスが、アセンブリ内のコードから作成されません。 |
|
.NET Framework クラス ライブラリには、カスタム属性を取得するメソッドが用意されています。既定では、これらのメソッドで属性の継承階層が検索されます。属性をシールすると、継承階層の全体が検索されなくなるため、パフォーマンスが向上します。 |
|
ジャグ配列とは、その要素も配列である配列です。要素を構成する配列のサイズは異なってもよいため、データ セットによっては無駄な空間が少なくなります。 |
|
値型の場合、Equals を継承した実装が Reflection ライブラリを使用して、すべてのフィールドの内容を比較します。Reflection は計算コストが高いため、場合によってはすべてのフィールドで等値性を比較する必要はありません。ユーザーがインスタンスの比較または並べ替えを行うことや、ハッシュ テーブル キーとしてインスタンスを使用することが予想される場合には、値型に Equals を実装する必要があります。 |
|
Dispose を実装するメソッドが GC.SuppressFinalize を呼び出していないか、Dispose を実装しないメソッドが GC.SuppressFinalize を呼び出しています。または、あるメソッドが GC.SuppressFinalize を呼び出し、this (Visual Basic では Me) 以外のオブジェクトを渡しています。 |
|
プロパティが読み取り専用であっても、プロパティで返される配列は書き込みから保護されません。配列の改ざんを防ぐには、プロパティで配列のコピーを返す必要があります。一般に、このようなプロパティを呼び出すときのパフォーマンス低下は理解されません。 |
|
String.Length プロパティまたは String.IsNullOrEmpty メソッドを使用して文字列を比較する方法は、Equals を使用する場合よりもはるかに高速です。 |
|
オブジェクトの有効期間の追跡に関連するパフォーマンス オーバーヘッドが増大するため、ファイナライザーは可能な限り使用しないでください。空のファイナライザーを使用すると、オーバーヘッドが増大するだけで何の利点もありません。 |
|
インスタンス データにアクセスしない、またはインスタンス メソッドを呼び出さないメンバーは、静的 (Visual Basic では共有) としてマークできます。メソッドを静的としてマークすると、コンパイラはこれらのメンバーに対する非仮想呼び出しサイトを出力します。パフォーマンス重視のコードでは、これにより大きくパフォーマンスを向上できます。 |
|
アセンブリ内でアクセスされていないと思われるプライベート フィールドが検出されました。 |
|
NeutralResourcesLanguage 属性は、ResourceManager に対し、アセンブリのニュートラル カルチャのリソースを表示するために使用した言語を通知します。これにより、読み込んだ最初のリソースに対する検索のパフォーマンスが向上し、ワーキング セットを縮小できます。 |