web-dev-qa-db-ja.com

オブジェクトをキャストするのにどのくらい費用がかかりますか?

可能性のある複製:
TypeCastingのパフォーマンス

別のオブジェクトとしてオブジェクトとしてキャストするのにどれくらいの費用がかかりますか?

CustomClass instance = GenericObject as CustomClass

それはすべてのコストとして避けるべきですか?

他の人がこれについてどう思うかを見たい。それは非常に状況的なものだと確信しています。

37
bobber205

実際に問題を引き起こしているという特定の証拠(測定)がない限り、特定の言語機能のパフォーマンスへの影響について心配する必要はありません。

あなたの主な関心事は、コードの正確さとその保守性です。

ただし、一般的な観察として、C =では、適切なOOプログラミングプラクティスを適用し、ジェネリック(特にコレクション)を適切に使用するだけで、不要なキャストを回避できます。実行する必要がある場合は、キャストでは、タイトなループで、または無効なキャスト例外をスローする可能性のある型を使用して実行しない限り、パフォーマンスのボトルネックになる可能性はほとんどありません。

実際のパフォーマンスの問題のほとんどは、特定の言語機能からではなく、アルゴリズムの選択またはプラットフォーム自体に対する認識の欠如から生じます。

47
LBushkin

いいえ、絶対に避けてはいけません。鋳造はそれほど高価ではありません。もちろん、1秒間に100万回実行されるループがある場合、キャストを行わずにパフォーマンスを節約することは理にかなっています。そうでない場合、パフォーマンスの問題は実際には発生しません。

キャスティングの本当の問題は、型の安全性をだますことです。注意していない場合、バグを導入したり、あらゆる場所にキャストしたりしてもコードの可読性が低下することはそれほど難しくありません。

29
Tamas Czinege

ジェネリックを使用できる場合は、キャストよりも優れたソリューションです。ボクシングとアンボクシングは高価な操作であり、可能であれば回避する必要があります。問題は時々それが回避できないことです。

また、ここでの他の回答は、ボクシングとして何かを心配することは、特定のパフォーマンスの懸念やコードの保守性と比較して非常に簡単であると述べました。私はそれに完全に同意します。

7
Lukasz

一般に、アドホックベースでオブジェクトをキャストするコストは、大規模なものでは低くなります。ただし、オブジェクトを何度も繰り返しキャストする場合は、パフォーマンスの問題の原因であることが判明した場合に、そのオブジェクトを回避する必要があります。

結局のところ、.NET 1.1から2.0への主な改善点の1つは、ジェネリックスの導入でした。これにより、オブジェクトの強く型付けされたリストの問題に対処しました(例:ArrayList =オブジェクトに基づく、List =型付きリスト)

5
AdaTheDev