Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon マッチャーを生の値で使用することのパフォーマンスへの影響はありますか


マッチャーを生の値で使用することのパフォーマンスへの影響はありますか


マッチャーと生の値を使用することのパフォーマンスへの影響を比較する場合、使用されるコンテキストに応じて、いくつかの要因が機能します。詳細な内訳は次のとおりです。

##一般的なプログラミング

プログラミングでは、MockitoやGoogletestなどのフレームワークのテストでマッチャーが使用されることがよくあり、アサーションやスタブの方法を作成します。マッチャーを使用する場合、Mockito [5] [8]の「InvaliduseofMatchersexcection」などのエラーを回避するために、すべての引数をマッチャーによって提供する必要があります。この要件は、生の値を直接使用するのと比較して、追加の関数呼び出しにより、わずかにオーバーヘッドにつながる可能性があります。

ただし、非常に多数のコールを扱ったり、コードのパフォーマンスクリティカルなセクションを扱っていない限り、パフォーマンスの違いは通常無視できます。ほとんどの場合、マッチャーが提供する読みやすさと柔軟性は、マイナーなパフォーマンスコストを上回ります。

##ルックアップおよびマッチング操作

Rustの「一致」表現とルックアップテーブルなどのルックアップ操作を含むシナリオでは、パフォーマンスはいくつかの要因によって異なる場合があります。

- ブランチの予測:「一致」式は、ブランチの予測がうまく機能する場合、より速くなる可能性があります。つまり、CPUは次にどのブランチが撮影されるかを正確に予測できます。ただし、パターンがランダムである場合、ブランチ予測の障害を回避するため、ルックアップテーブルはより速くなる可能性があります[3] [6]。

-InliningとCache:特に大きなデータセットの場合、適切にインラインおよびキャッシュされた場合、ルックアップテーブルはより速くなります。ただし、「一致」の式は一般に、指示が少なくなり、インランスが微小建築的危険を引き起こさない限り、より高速になる可能性があります[3] [6]。

##正規表現とパターンマッチング

パターンマッチングに正規表現(正規表現)を使用する場合、パフォーマンスは、正規表現の複雑さと処理されるデータのサイズによって大きな影響を受ける可能性があります。正規表現は強力で柔軟ですが、過度に複雑なパターンは、バックトラッキングやその他のオーバーヘッドによりパフォーマンスが低下する可能性があります[9]。

対照的に、生値またはより単純な一致メカニズムを使用すると、簡単な比較にはより速いかもしれませんが、正規表現の柔軟性と表現力がありません。

##観測可能性とデータシステム

高いカーディナリティデータ(例:ログ、メトリック、トレースなど)を扱うシステムでは、マッチャーまたは複雑なクエリを使用すると、パフォーマンスの問題につながる可能性があります。高いカーディナリティとは、効率的なデータストレージと検索のために設計されたシステムを圧倒することができる多数の一意の値を指します[1]。そのような場合、クエリを最適化するか、より効率的なデータ構造を使用すると、パフォーマンスへの影響が軽減される可能性があります。

要約すると、マッチャーと複雑なマッチングメカニズムは柔軟性と読みやすさを提供しますが、生の値を直接使用するのと比較して、マイナーなパフォーマンスオーバーヘッドを導入できます。ただし、これらのオーバーヘッドは、通常、パフォーマンスが批判的なコードセクションで、または非常に大きなデータセットを扱う場合ではない限り無視できます。マッチャーと生の値の選択は、読みやすさ、保守性、パフォーマンスのニーズなど、アプリケーションの特定の要件に基づいている必要があります。

引用:
[1] https://last9.io/blog/high-vs-low-cardinality/
[2] https://stats.stackexchange.com/questions/651015/use-smd-or-raw-difference in-proportions-comparing-balance-of-bynary-covari
[3] https://users.rust-lang.org/t/why-is-a-lookup-table-than-than-a-match-expression/24233
[4] https://docs.splunk.com/documentation/scs/current/searchreference/conditionalfunctions
[5] https://zsoltfabok.com/blog/2010/08/jmock-versus-mockito/
[6] https://kevinlynagh.com/notes/match-vs-lookup/
[7] https://docs.vespa.ai/en/reference/schema-reference.html
[8] https://www.digitalocean.com/community/tutorials/mockito-argument-matchers-any-eq
[9] https://newrelic.com/blog/how-to-relic/extracting-log-data-with-regex
[10] http://google.github.io/googletest/reference/matchers.html