Qt signaler slots ytelse h1>

Nar det er sagt, er det grunnlag for sammenligning. Bade libsigc ++ og Qt gir lignende funksjonalitet med signal / slotsystem. De begge er C ++ biblioteker som kjorer under bade Windows og Unix. Begge stammer fra widget sett og begge har fleksibilitet og brukervennlighet er en sentral faktor. Qt versjon 1.42 ble brukt og Libsigc ++ endret fra versjon 0.8.0.

(Merk at jeg har v rt i kontakt med Arnt Gulbrandsen fra Troll Tech AS. Han har oppdaget et problem i Qt-systemet, noe som resulterte i overdreven tid i emitteringsfunksjonene. Han indikerer at det skal settes fast for Qt 2.0 som vil forbedre ytelsen .)

Stringbaserte versmaler.

Stringsbaserte signalsystemer har en rekke fordeler og ulemper over templatbasert. Det er enklere a implementere, sa det bor generelt vinne i storrelse og kompilere fart i forhold til oppblasthet av maler. Da de ikke trenger noe annet enn grunnleggende C ++-funksjoner, er slike systemer mer b rbare accross systemer. Ethvert signal du onsker kan bli erkl rt, inkludert nye signaler ved kjoretid. (Selv om Qt ikke drar nytte av dette.) Dette er ogsa en ulempe for tiln rmingen, da kompilatoren ikke sjekker typen av forbindelsen til de blir kalt pa kjoretid. Noen grunnleggende kontroller kan gjores, men generelt er det minimal. Ofte krever denne tiln rmingen en preprosessor for a skjule strengenheten og gjore slik kontroll.

Mal basert pa den annen side er helt annet dyr. Alt er kompilert inn i bin ret, inkludert forbindelsesdannende midler. Dette er en stor fordel at det som kompilerer, kjorer. Det var enda ikke nodvendig med en forhandsforsterker, da hele systemet kan bygges med C ++-notering. All typechecking er gjort pa kompileringstid av kompilatoren, slik at det ikke ma foretas kontroller i lopet av driftstiden. Raskere kjorer kommer en pris. Alle malene genererer kode som vil vises i bin ret. Derfor er store smerter i utformingen av et malbibliotek tatt for a holde dette til en minumum. Videre varierer malkapasiteten til forskjellige kompilatorer vilt, slik at portablity er vanskelig a oppna. Disse er ikke uoverstigelige, men libsigc ++ har utmerket portablity og storrelse.

Tabell over funksjoner.

Funksjonsdetaljer.

Offentlig og beskyttet refererer til tilgang til et signal i en klasse. Qt kan bare slippe ut fra innehavsklassen. Libsigc ++-signaler er normale objekter og kan dermed v re private, beskyttede eller offentlige.

Feid og ikke-ugyldig avkastning refererer til hvilken type et signal kan returnere fra utsendelse. Qt stotter bare ugyldig avkastning. Libsigc ++ stotter returtyper av de fleste slag, inkludert bygningslister over returverdier. Men passere ved referanse har fortsatt noen fa feil.

Det kan v re noen begrensninger pa antallet og typen argumenter et signal kan ta. Qt stotter ikke maler eller funksjonspekere i argumentlister. Dette kan bli rammet med forsiktig typedefs. Dette er et resultat av moc preprosessoren.

Signalerkl ringer kan ha begrensninger i stedet for deklarasjonen. Libsigc ++-signaler kan deklareres hvor som helst, inkludert innenfor maler og nestede klasser. Dette er et stort pluss.

Libsigc ++ leverer et sett med adaptere for a endre typer slots, inkludert bindende argumenter og konverteringstyper. Dette er en funksjon som vokste ut av nodvendigheten av gtkmm-prosjektet som matte ta noe fra en C-type til en C ++-type. Det kan v re veldig nyttig.

Storrelsen pa signaler er det eneste stedet hvor Qt er en klar vinner. Null er en veldig attraktiv kostnad. Den samme effekten kan oppnas ved hjelp av libsigc ++ med et spesialisert signal og et kart. Imidlertid vil dette arrangementet v re langsommere. Denne funksjonaliteten er planlagt a bli lagt til i libsigc ++.

Speed referanser.

Antall sporene ble variert for a avgjore hvor mye av kostnaden per emitt er og hvor mye er per spor knyttet.

Libsigc ++ kan kjores med enten trad sikker marshallering av returverdi, hopper over returverdi eller marshallering pa en ikke-sikker mate. Den n rmeste sammenligningen mellom Qt og libsigc ++ er a hoppe over returverdien, fordi Qt ikke har noen stotte for returtyper. Fordi Qt deler en datastruktur for alle signallister, er tidene for utgivelse vanskelig a beregne. Generelt er jo flere signaler som er koblet jo lenger tid det tok a finne dataene som trengs for a sende ut sporet, og oke utslippskostnaden. Ettersom sv rt fa koblinger ble testet, er det ikke klart hvor hoyt denne prisen kan ga. (Libsigc ++ er mer direkte i tiln rming, sa man kan regne ut rent ved a multiplisere frekvensene av kostnadene.)

Qt gjor et kutt for a sende ut signaler nar det ikke er etablert noen tilkoblinger, men som gir en enorm hastighet for a gi tid. Men som det generelle tilfellet vil ha minst ett signal forbundet et sted i objektet, er dette ikke representativt. Hvis det er minst ett spor forbundet med signalet, betales en 15ms tidsforsinkelse. Dette ville v re et godt omrade i Qt for forbedring.

I en direkte sammenligning er libsigc ++ 30 ganger raskere for a gi ut et tilkoblet signal. Thread safe marshalling av returverdier oker avgir straff med 3, som fortsatt er en storrelsesorden raskere at Qt for a sende et signal med ett spor. Den per sporet kostnaden for uten marshalling av returverdier er bare 3 ganger sakte i Qt da libsigc ++, og sammenlignbar med marshaller. Den forste oppstartskostnaden dominerer imidlertid over alle andre. Sa sa langt som fart er bekymret, er libsigc ++ klart bedre.

Bin r storrelse.

Kompilere tid.

Endelig analyse.

Referanser.

tm – Qt er et varemerke for Troll Tech As of Norway.

Post Author: admin

You may also like

Roulette Strategy 6 Numbers.

Roulette Strategy 6 Numbers. roulettstrategi 6 tall. Gambling er en

BigBCasinos.

BigBCasinos. The Best Online Casino Directory. Historien om Roulette. Spinn

Translation



Hei! Vil du spille i det mest heldige kasinoet? Vi fant det for deg. Prøv her nå!