2009-01-07 6 views
0

Je développe une application Cocoa qui communique en permanence avec un service Web pour obtenir des données à jour. Cela réduit considérablement les performances de l'application. Les appels sont faits au service Web de manière asynchrone, mais le nombre d'appels est énorme.Réglage des performances dans l'application Cocoa

De quelles façons puis-je améliorer les performances de l'application? Existe-t-il un bon document/rédiger disponible qui donne les meilleures pratiques à suivre lorsqu'une application Cocoa communique avec un service web?

Merci

Répondre

2

Oui! Apple a en fait quelques guides très concis sur les performances qui couvrent beaucoup de trucs et de techniques, je suis sûr que vous trouverez quelque chose de pertinent pour votre propre application. Il peut y avoir quelques guides supplémentaires spécifiques à 10.5 que je n'ai pas encore vus, mais voici trois que j'ai trouvé utiles dans le passé.

La chose la plus importante à emporter cependant, est que vous avez besoin d'utiliser des outils de performance pour voir exactement où le goulot d'étranglement se produit. Parfois, il peut être à l'endroit où vous vous y attendez le moins.

+0

Merci beaucoup pour les documents. Ils ont vraiment aidé. – lostInTransit

3

Vous devriez essayer Shark qui vient avec les devtools Mac OS X - vraiment super pour creuser dans votre callstack et devrait vous permettre de limiter aux bibliothèques et réseau d'amis.

2

Je pense que si vous utilisez Shark, vous trouvez simplement que votre application bloque l'attente des réponses du serveur. La répartition du code sur les machines est beaucoup plus difficile à comparer, car les outils standard ne peuvent faire référence qu'à une partie de l'image.

Il semble que vous ayez besoin de regrouper les appels en moins de transactions .... Votre goulot d'étranglement est presque certainement le réseau. Qu'en est-il de l'envoi de plusieurs appels en tant que tableau d'appels? et la même chose pour les réponses? Peut-être que vous pourriez tamponner les appels localement et ne les envoyer que quelques fois par seconde en une seule transaction?

Tony

+0

Merci pour la suggestion Anthony. Le problème ici est que je fais ces appels pour lire le contenu d'un fichier sur le serveur et j'envoie des requêtes avec une plage d'octets à lire (comme la requête vient du noyau) donc je ne peux pas vraiment empiler les requêtes et envoyer leur. Le noyau n'attendra pas :) – lostInTransit