Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Vannak -e valamilyen teljesítmény -következménye a csatlakozóknak a nyers értékek feletti használatára?


Vannak -e valamilyen teljesítmény -következménye a csatlakozóknak a nyers értékek feletti használatára?


Amikor összehasonlítjuk a mérkőzések és a nyers értékek használatának teljesítményének következményeit, számos tényező jön létre, attól függően, hogy milyen kontextusban használják őket. Itt van egy részletes bontás:

Általános programozás

A programozás során a meccseket gyakran használják olyan keretek tesztelésére, mint a Mockito vagy a GoogLetest állítások vagy csonk módszerek készítéséhez. Matcher használatakor az összes érvnek a meccseknek kell lennie, hogy elkerüljék a hibákat, mint például az „InvaliduseOfMatchersexception” a Mockito -ban [5] [8]. Ez a követelmény valamivel több általános költséghez vezethet a kiegészítő funkcióhívások miatt, összehasonlítva a nyers értékek közvetlen használatával.

A teljesítménykülönbség azonban általában elhanyagolható, kivéve, ha nagyon sok hívással vagy a teljesítmény-kritikus kódrészekkel foglalkozik. A legtöbb esetben a mérkőzések által biztosított olvashatóság és rugalmasság meghaladja a kisebb teljesítményköltségeket.

A keresési és az illesztési műveletek során

A keresési műveleteket érintő forgatókönyvekben, például a Rust „Match” kifejezéseivel szemben a keresési táblákkal, a teljesítmény számos tényezőtől függően változhat:

- Fiók előrejelzése: A „Match” kifejezések gyorsabbak lehetnek, ha az ág előrejelzése jól működik, azaz a CPU pontosan meg tudja jósolni, hogy melyik ágot veszik fel a következőkbe. Ha azonban a minta véletlenszerű, akkor a keresési táblázat gyorsabb lehet, mivel elkerüli az ág előrejelzési hibáit [3] [6].

- Inlining és gyorsítótár: A keresési táblázatok gyorsabbak lehetnek, ha megfelelően be vannak zárva és gyorsítótárba, különösen a nagyobb adatkészleteknél. A „Match` kifejezések azonban általában kevesebb utasítást generálnak, és gyorsabbak lehetnek, ha a beillesztés nem okoz mikroarchitekturális veszélyeket [3] [6].

Rendszeres kifejezésekben és mintázat -illesztésben

Ha rendszeres kifejezéseket (REGEX) használ a minta -illesztéshez, a teljesítményt jelentősen befolyásolhatja a Regex összetettsége és a feldolgozott adatok mérete. Míg a regex erőteljes és rugalmas, a túlságosan összetett minták lassabb teljesítményhez vezethetnek a visszalépés és más általános költségek miatt [9].

Ezzel szemben a nyers értékek vagy az egyszerűbb illesztési mechanizmusok használata gyorsabb lehet az egyértelmű összehasonlításokhoz, de hiányzik a Regex rugalmassága és kifejezőképessége.

A megfigyelhetőség és az adatrendszerek

A magas kardinalitási adatokkal foglalkozó rendszerekben (például naplók, mutatók, nyomok) a meccsek vagy összetett lekérdezések használata teljesítményproblémákhoz vezethet. A magas kardinalitás számos egyedi értékre utal, amelyek eláraszthatják a hatékony adattároláshoz és a visszakereséshez tervezett rendszereket [1]. Ilyen esetekben a lekérdezések optimalizálása vagy a hatékonyabb adatszerkezetek használata enyhítheti a teljesítményhatásokat.

Összefoglalva: míg a mérkőzések és az összetett illesztési mechanizmusok rugalmasságot és olvashatóságot kínálnak, kisebb teljesítmény -általános költségeket vezethetnek be, összehasonlítva a nyers értékek közvetlen használatával. Ezek az általános költségek azonban általában elhanyagolhatóak, kivéve, ha a teljesítmény-kritikus kódszakaszokban vagy a nagyon nagy adatkészletekkel foglalkoznak. A meccsek és a nyers értékek közötti választásnak az alkalmazás konkrét követelményein kell alapulnia, ideértve az olvashatóságot, a karbantarthatóságot és a teljesítményigényt.

Idézetek:
[1] https://last9.io/blog/high-vs-low-cardinality/
[2] https://stats.stackexchange.com/questions/651015/use-smd-or-raw-difference-in-proportions-when-comparing-balance-of-binary-covari
[3] https://users.rust-lang.org/t/why-is-a--lookup-table-faster-than-a-match-expression/24233
[4] https://docs.splunk.com/documentation/scs/current/searchreference/conditionalfuncts
[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