Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Er der nogen præstationskonsekvenser ved at bruge matchere over råværdier


Er der nogen præstationskonsekvenser ved at bruge matchere over råværdier


Når man sammenligner præstationsimplikationerne ved at bruge matchere kontra råværdier, kommer flere faktorer i spil, afhængigt af den kontekst, de bruges i. Her er en detaljeret sammenbrud:

Generelt programmering

I programmering bruges matchere ofte til test af rammer som Mockito eller Googletest til at fremsætte påstande eller stubmetoder. Når man bruger matchere, skal alle argumenter leveres af matchere for at undgå fejl som `InvalidUseOfMatcherSexception 'i Mockito [5] [8]. Dette krav kan føre til lidt mere overhead på grund af de yderligere funktionsopkald sammenlignet med at bruge rå værdier direkte.

Imidlertid er præstationsforskellen typisk ubetydelig, medmindre du har at gøre med et meget stort antal opkald eller i præstationskritiske sektioner af kode. I de fleste tilfælde opvejer læsbarheden og fleksibiliteten, der leveres af matchere, alle mindre ydelsesomkostninger.

i opslag og matchende operationer

I scenarier, der involverer opslagsoperationer, såsom i Rusts 'match' udtryk versus opslagstabeller, kan ydelsen variere baseret på flere faktorer:

- Grenforudsigelse: `Match` -udtryk kan være hurtigere, hvis grenforudsigelse fungerer godt, hvilket betyder, at CPU'en nøjagtigt kan forudsige, hvilken gren der vil blive taget næste. Men hvis mønsteret er tilfældigt, er en opslagstabel muligvis hurtigere, fordi det undgår grenforudsigelsesfejl [3] [6].

- Inklining og cache: Opslagstabeller kan være hurtigere, når de er indledt og cache korrekt, især for større datasæt. Imidlertid genererer 'match` -udtryk generelt færre instruktioner og kan være hurtigere, medmindre indbygning forårsager mikroarkitektoniske farer [3] [6].

i regelmæssige udtryk og mønstermatchning

Når man bruger regelmæssige udtryk (regex) til mønstermatchning, kan ydelsen påvirkes markant af kompleksiteten af ​​regex og størrelsen på de data, der behandles. Mens Regex er kraftfuld og fleksibel, kan alt for komplekse mønstre føre til langsommere ydeevne på grund af backtracking og andre omkostninger [9].

I modsætning hertil kan brug af rå værdier eller enklere matchningsmekanismer være hurtigere til ligetil sammenligning, men mangler Regex fleksibilitet og udtryk.

i observerbarhed og datasystemer

I systemer, der beskæftiger sig med høje kardinalitetsdata (f.eks. Logfiler, målinger, spor), kan brug af matchere eller komplekse forespørgsler føre til ydelsesproblemer. Høj kardinalitet henviser til et stort antal unikke værdier, som kan overvælde systemer designet til effektiv datalagring og hentning [1]. I sådanne tilfælde kan optimering af forespørgsler eller ved hjælp af mere effektive datastrukturer afbøde præstationseffekter.

Sammenfattende, mens matchere og komplekse matchningsmekanismer tilbyder fleksibilitet og læsbarhed, kan de introducere mindre ydelsesomkostninger sammenlignet med at bruge rå værdier direkte. Imidlertid er disse omkostninger normalt ubetydelige, medmindre de er i ydelseskritiske kodesektioner eller når de håndterer meget store datasæt. Valget mellem matchere og råværdier skal være baseret på de specifikke krav i applikationen, herunder læsbarhed, vedligeholdelighed og ydelsesbehov.

Citater:
[1] https://last9.io/blog/high-vs-low-cardinality/
)
)
[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