[php] Wat is sneller, subarray's of lange woorden

Pagina: 1
Acties:

  • TiG
  • Registratie: Maart 2001
  • Laatst online: 29-06 14:19
Ik wilde dit gewoon ff weten. Welk van de volgende array's is sneller. Ook in de latere aanroep:
PHP:
1
<?$array["key1"]["key2"]["key3"] = "waarde1";$array["key1"]["key2"]["key4"] = "waarde2";$array["key5"]["key2"]["key3"] = "waarde3";$array["key5"]["key2"]["key4"] = "waarde4";$array["key6"]["key2"]["key3"] = "waarde5";$array["key6"]["key2"]["key4"] = "waarde6";?>

of
PHP:
1
<?$array["key1key2key3"] = "waarde1";$array["key1key2key4"] = "waarde2";$array["key5key2key3"] = "waarde3";$array["key5key2key4"] = "waarde4";$array["key6key2key3"] = "waarde5";$array["key6key2key4"] = "waarde6";?>

U gaat door voor de retorische vraag...


Verwijderd

Lange woorden.. array's zijn langzamer dan strings..

  • Banzi
  • Registratie: Juni 2001
  • Laatst online: 25-08 09:58
Volgens mij ook... Bij die bovenste heb je een array met 3 kolommen, terwijl je bij de onderste er maar 1 hebt... Dan is dat verschil toch best wel aardig...

Ik zag, ik nam en ik kwam...


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
PHP gebruik hash-tables om 'n poging te kunnen doen in constante tijd een element uit een array te halen. Ik weet niet hoe dat werkt voor multi-dimensionale arrays, maar ik vermoed dat in zo'n geval de waarde van de array zelf een array is. In dat geval is de tweede methode dus sneller. Ik kan me eigenlijk geen echte reden voorstellen waarom de eerste methode, in welke implementatie dan ook, sneller zou kunnen zijn.

De vraag is echter of het terecht is dat je een vrij kleine snelheidswinst ten koste laat gaan van een goed ontwerp.

Verwijderd

Vraagje wat is nu sneller(dit gebruik ik namelijk vaak):
PHP:
1
<?$array["key1key2key3"] = "waarde1";$array["key1key2key4"] = "waarde2";$array["key5key2key3"] = "waarde3";$array["key5key2key4"] = "waarde4";$array["key6key2key3"] = "waarde5";$array["key6key2key4"] = "waarde6";?>

of
PHP:
1
<?$array[1][1][1] = "waarde1";$array[1][1][2] = "waarde2";$array[1][2][1] = "waarde3";$array[1][2][2] = "waarde4";$array[1][3][1] = "waarde5";$array[1][3][2] = "waarde6";?>

Ik denk namelijk methode 2, wat denken jullie? (8>

Verwijderd

Op woensdag 10 april 2002 18:22 schreef Kelso het volgende:
Vraagje wat is nu sneller(dit gebruik ik namelijk vaak):
PHP:
1
<?//....?>

Ik denk namelijk methode 2, wat denken jullie? (8>
Nog steeds methode 1

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Op woensdag 10 april 2002 18:21 schreef Soultaker het volgende:
De vraag is echter of het terecht is dat je een vrij kleine snelheidswinst ten koste laat gaan van een goed ontwerp.

Rustacean


  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
idd, ik denk dat het heeel weinig uitmaakt, en je code word er wel heeel erg ranzig door.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 10 april 2002 18:21 schreef Soultaker het volgende:
Ik kan me eigenlijk geen echte reden voorstellen waarom de eerste methode, in welke implementatie dan ook, sneller zou kunnen zijn.
In C zal het niet of nauwelijks verschillen, omdat daar de aanroep array[x][y] wordt (door de compiler al) vertaald naar array[x*breedte + y] (bij mijn weten) en het dus gewoon een aanroep naar een 1-dimensionaal geheugen blok blijft.

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 09:02

Knutselsmurf

LED's make things better

Op woensdag 10 april 2002 19:14 schreef ACM het volgende:

[..]

In C zal het niet of nauwelijks verschillen, omdat daar de aanroep array[x][y] wordt (door de compiler al) vertaald naar array[x*breedte + y] (bij mijn weten) en het dus gewoon een aanroep naar een 1-dimensionaal geheugen blok blijft.
Maar bij C ligt de afmeting van het array vast, waardoor deze contructie mogelijk is en bij PHP niet.

- This line is intentionally left blank -


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Op woensdag 10 april 2002 19:14 schreef ACM het volgende:
In C zal het niet of nauwelijks verschillen, omdat daar de aanroep array[x][y] wordt (door de compiler al) vertaald naar array[x*breedte + y] (bij mijn weten) en het dus gewoon een aanroep naar een 1-dimensionaal geheugen blok blijft.
Nou, er zit natuurlijk een grens aan 't aantal operaties dat je in een aantal clockcycles kan doen. Een drie-dimensionale array zal een berekening als (x*a+y*b+c*d) moeten doen en dat kost vrijwel altijd meer clockcycles.

In elk geval zal de één-dimensionale variant niet sneller zijn (en dat was wat ik zei).

Zelfs als de PHP-methode aanzienlijk trager is dan de C-variant, betwijfel ik ten zeerste of de snelheidswinst ooit voldoende zal zijn om het verneuken van een goed ontwerp te rechtvaardigen. Waarschijnlijk gewoon niet doen dus.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 10 april 2002 19:46 schreef Soultaker het volgende:
Nou, er zit natuurlijk een grens aan 't aantal operaties dat je in een aantal clockcycles kan doen. Een drie-dimensionale array zal een berekening als (x*a+y*b+c*d) moeten doen en dat kost vrijwel altijd meer clockcycles.
Als het tijdens de compilatie wordt gedaan maakt dat natuurlijk niets uit ;)

Wel als het tijdens runtime gedaan wordt.
In elk geval zal de één-dimensionale variant niet sneller zijn (en dat was wat ik zei).
De 1D zal juist wel sneller zijn ;)
Zelfs als de PHP-methode aanzienlijk trager is dan de C-variant, betwijfel ik ten zeerste of de snelheidswinst ooit voldoende zal zijn om het verneuken van een goed ontwerp te rechtvaardigen. Waarschijnlijk gewoon niet doen dus.
Dat ben ik ook zeker met je eens :)

De multi-dimensionale oplossing is leesbaarder/werkbaarder/flexibeler dus die zou ik zelf iig altijd gebruiken in zo'n geval :)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Op woensdag 10 april 2002 19:54 schreef ACM het volgende:
Als het tijdens de compilatie wordt gedaan maakt dat natuurlijk niets uit ;)

Wel als het tijdens runtime gedaan wordt.
True, maar als de invoer uit variabelen bestaat, dan KAN het niet compile-time (zoals zowel in C als in PHP geldt).
De 1D zal juist wel sneller zijn ;)
Je hebt gelijk. Er stond dan ook langzamer in mijn fantasiewereld. ;)
Pagina: 1