Gibt es einen Unterschied in der Geschwindigkeit zwischen den beiden folgenden Fällen:NSUserDefaults Leistungsvergleich
A:
userName=[[NSUserDefaults standardUserDefaults] objectForKey:@"userName"];
userEmail=[[NSUserDefaults standardUserDefaults] objectForKey:@"userEmail"];
userId=[[[NSUserDefaults standardUserDefaults] objectForKey:@"userId"] intValue];
B:
userDictionary=[[NSUserDefaults standardUserDefaults] objectForKey:@"userDictionary"];
userName=[userDictionary objectForKey:@"name"];
userEmail=...etc...
Auch wenn Unterschiede in der Geschwindigkeit könnte extrem klein sein, technisch, gibt es Leistungsunterschiede?
Was haben Ihre Leistungstests angezeigt? (Die Antwort, BTW, ist in der Regel ja, aber es gibt keine solche Anforderung. Der Compiler könnte es legal optimieren, wenn es gewählt wurde. Nur Tests werden Ihnen den Unterschied sagen.) –
Wie mache ich Performance-Tests? (Ich wollte auch das "Warum" kennen und nicht nur ein Ja oder Nein, das ich nicht beantworten kann) – Snowman
Indem ich eine Schleife einfüge und sie millionenfach oder so ablaufe und zeitlich stimme. Was "warum" betrifft, fordert die erste eine Methode mehrmals an, was teurer ist, als diese Methode nicht aufzurufen. Der Compiler darf das optimieren. Clang kann es nicht wirklich optimieren, weil es nicht weiß, dass Sie 'standardUserDefaults' nicht durch eine Methode mit Nebeneffekten zur Laufzeit ersetzt haben. In der Praxis kann es also nicht wirklich optimiert werden und Sie müssen die Anrufe tätigen. Aber das ist in der Regel der falsche Ansatz für Leistungsfragen. Beginnen Sie immer mit Tests. –