Nested for-loops discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Ik heb een vrij rekenintensieve app geschreven die gebruik maakt van 4 geneste for-loops. Je zou het ongeveer zo kunnen weergeven: Code: int a,b,c,d; for(a ...
|
Registreer | FAQ | Ledenlijst | Kalender | Berichten van vandaag | Zoeken |
#1
|
|||
|
|||
Nested for-loops
Ik heb een vrij rekenintensieve app geschreven die gebruik maakt van 4 geneste for-loops. Je zou het ongeveer zo kunnen weergeven:
Code:
int a,b,c,d; for(a = 0; a < 52; a++){ for(b = 0; b < 36; b++){ for(c = 0; c < 36; c++){ for(d = 0; d < 36; d++){ // Handle code // Maak string van de indices met behulp van [NSString stringWithFormat:@"..."] // SHA1-hash maken van de string // Controle uitvoeren in if-statement, true: loops stoppen, false: go on } } } } Uiteraard heeft het er mee te maken wat er binnen in de for wordt uitgevoerd: een aantal berekeningen met de indexes van de lopende fors. Hieruit wordt een SHA1-hash berekend. De methode draait in een aparte thread, om er voor te zorgen dat de UI blijft werken. Dit leverde wel snelheidswinst op. P.S. ik heb al veel optimalisaties doorgevoerd. Ik autorelease alles dat binnen de for wordt aangemaakt en na één for-cycle niet meer nodig is. Daarnaast heb ik alle index defines buiten de for. De lengtes van de loops heb ik ook allemaal hardcoded en dus geen method call in de for signature, zoals: [anArray length]. Vraag: waarom kan de Simulator de loops 25 minuten eerder afronden dan de iPhone zelf? Ik neem aan dat de Simulator beperkt wordt in zijn snelheid en niet volledig gebruik maakt van de processor in m'n MacBook? Laatst gewijzigd door michiel3; 16-08-09 om 23:08. Reden: Verduidelijking |
|
|
Gesponsorde links (verdwijnt na registratie)
|
#2
|
||||
|
||||
Volgens mij gebruikt de simulator wel volledig gebruik van het geheugen en de processor van je macbook. Tenminste, dat is mijn 'gevoel'. Ik merk het ook met heel veel dingen dat het op de macbook veel sneller gaat dan op de iPhone zelf.
Ik kan dit niet onderbouwen met bewijsmateriaal, maar dat is wel het idee dat ik heb.
__________________
Het grootste voetbalforum van Nederland |
#3
|
||||
|
||||
Ik kan je met zekerheid zeggen dat de Simulator volledige resources gebruikt. Daarom dat je dan ook altijd moet testen op een echt device. De code die je uitgevoerd wil zien is blijkbaar veel te intensief voor de processor en het beschikbaar geheugen op het device.
|
#4
|
|||
|
|||
De simulator gebruikt inderdaad gewoon de volledige resources van je Macbook.
Ik zou eens gaan kijken wat er precies de vertragende factor is in je berekening. De for loops kunnen het probleem niet zijn, dus zou ik in het diepste niveau eens wat berekeningen uitschakelen totdat je de bottleneck hebt gevonden, en die eventueel optimaliseren. Ik weet natuurlijk niet je precieze code, maar string operaties zijn redelijk zwaar denk ik, en het berekenen van een SHA-1 hash ook wel. Die eerste zou je misschien kunnen versnellen door geen strings te gebruiken maar character arrays, en dan op het laatst converteren naar string.
__________________
Software Engineer iPhone Developer |
#5
|
|||
|
|||
Jammer dat de Simulator qua snelheid niet de snelheden van de iPhone nabootst en ook het geheugen.
Citaat:
|
#6
|
|||
|
|||
Ik ben eigenlijk wel benieuwd waarvoor die code wordt gebruikt... SHA1 hash berekenen van 2426112 strings lijkt me toch wel vrij intensief voor een iPhone. Je kan trouwens met Instruments perfect zien waar je app de meeste tijd doorbrengt en daar je optimalisaties concentreren. Mss kan je een efficienter SHA1 algoritme gebruiken ofzo.
|
#7
|
||||
|
||||
Citaat:
Hier nog even op terugkomend.. Even een stukje quoten van de apple developers site: Citaat:
|
Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten) |
|
|
|