Optimisation accès aux objets
Salut,
Ca fait un moment que je me demande si dans :
Le compilateur optimise de manière à ne pas créer la chaine à chaque fois mais pour avoir un équivalent de :
Mais visiblement ce n'est pas le cas, après plusieurs essais le premier code nécéssite 10 sec contre 8 pour le second
Vous allez me dire que l'on compare pas les chaines tous les chaines, les chaines dans le code ce pas terrible... Mais récupérer un pointeur depuis une méthode c'est assez courant :
met 10 sec contre 15 avec :
Que ce passe t-il ? Mes tests sont bidons ? Je compile en mode "Release" avec option de compilation -O3. Mais surtout, comment faire pour le compilo puisse l'optimiser seul ?
Bon, vous allez aussi me dire que je ne demande jamais le même object 1M de fois de suite...
Ca fait un moment que je me demande si dans :
<br /> NSLog(@"11111111");<br /><br /> int i;<br /> NSString *s=@"nil";<br /><br /> for (i=0;i<100000000;i++)<br /> {<br /> [s isEqualToString:@"string"];<br /> }<br /><br /> NSLog(@"22222222");<br /><br />
Le compilateur optimise de manière à ne pas créer la chaine à chaque fois mais pour avoir un équivalent de :
<br /> NSLog(@"11111111");<br /><br /> int i;<br /> NSString *s=@"nil";<br /> NSString *r=@"string";<br /> <br /> for (i=0;i<100000000;i++)<br /> {<br /> [s isEqualToString:r];<br /> }<br /><br /> NSLog(@"22222222");<br />
Mais visiblement ce n'est pas le cas, après plusieurs essais le premier code nécéssite 10 sec contre 8 pour le second
Vous allez me dire que l'on compare pas les chaines tous les chaines, les chaines dans le code ce pas terrible... Mais récupérer un pointeur depuis une méthode c'est assez courant :
<br />- (NSString*)string<br />{<br /> static NSString *string=@"string";<br /> return string;<br />}<br /><br />- (void)toto<br />{<br /> NSLog(@"11111111");<br /><br /> int i;<br /> NSString *s=@"nil";<br /> NSString *r=[self string];<br /> <br /> for (i=0;i<100000000;i++)<br /> {<br /> [s isEqualToString:r];<br /> }<br /><br /> NSLog(@"22222222");<br />}<br />
met 10 sec contre 15 avec :
<br /> for (i=0;i<100000000;i++)<br /> [s isEqualToString:[self string]];<br />
Que ce passe t-il ? Mes tests sont bidons ? Je compile en mode "Release" avec option de compilation -O3. Mais surtout, comment faire pour le compilo puisse l'optimiser seul ?
Bon, vous allez aussi me dire que je ne demande jamais le même object 1M de fois de suite...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
et bien une seule instance sera créée pour @string et du coup tu peux très bien faire ceci:
pour comparer les deux chaà®nes, car comparer deux pointeurs c'est plus rapide que comparer deux chaà®nes..
voilà , mes 2 cents
[self string] dans mon exemple renvoit toujours le même object, mais ce n'est pas forcément toujours le cas et le compilateur ne peut le savoir...
maconnect est aussi tombé ou il avait un temps d'avance ?
Bref, la science infuse ce n'est pas pour tous.
Vous ne comprenez rien à ce que je dis ? Tapez F1.