拡張方法は高すぎますか?
-
28-09-2019 - |
質問
拡張メソッドを追加すると、プログラムのパフォーマンスにはいくらかかりますか?
動作しますか、それとも荷重が遅くなる可能性がありますか?
ありがとう。
解決
拡張メソッドを追加すると、プログラムのパフォーマンスにはいくらかかりますか?動作しますか、それとも荷重が遅くなる可能性がありますか?
パフォーマンスヒットはありません。拡張方法は本当に静的な方法です。
他のヒント
拡張法は、静的方法に適用される構文糖です。
理論的には、静的方法は非仮想的なインスタンスメソッドよりも高速です(nullを確認する必要はありません this
)これは仮想インスタンスメソッドよりも高速です(呼び出す実装を検索する必要はありません)。
理論的には、最適化はこれらの違いを取り除く可能性があります。また、オブジェクトは、とにかくヌルチェック(使用方法を明示的であろうと暗黙的であろうと)を必要とするような方法でおそらく対処されるため、拡張メソッドに関しては静的に関しても誇張されています。
実際には、拡張方法が何であれ、それが拡張であろうとインスタンスであろうと、はるかに多くの影響を与える可能性があります。
非常に長い実行ループで整数拡張法を使用してこれをすばやくテストしましたが、テストした場合には、パフォーマンスが一般的に同じであることがわかりました。最適化されていないアセンブリをデバッグまたは実行するとき、拡張メソッドは私のコントロールケースの約2倍ゆっくりと実行されました。これは、これらのメソッドをインラインにすることができず、コールスタックなどを追跡する必要があるため、これは理にかなっています。
したがって、リリースの準備ができているアセンブリでは、パフォーマンスペナルティはありません。
プログラムをロードすることはプログラムの実行パスに依存しないため、ロードが遅くなりません。
ゆっくりと走るのは?拡張メソッドと非拡張法にかかった時間のみを測定すると、特定の場合は表示されます。実際に測定可能であっても、違いは重要ではないと思います。
重要な考慮事項は、常に「拡張機能が私のコードをより明確かつ理解し、維持しやすくする」ことです。