2010-05-23 10 views
0

Normalement, je suis bien conscient qu'une telle considération est une optimisation prématurée. À l'heure actuelle, j'ai des gestionnaires d'événements attachés à l'intérieur d'une boucle foreach. Je me demande si ce style pourrait être sujet à des fuites ou à une utilisation inefficace de la mémoire en raison de la création de fermetures. Y a-t-il une validité à cette pensée?MonoTouch - Foreach vs pour les boucles (performance)

Répondre

1

Les fermetures s'appliquent uniquement si vos gestionnaires d'événements sont des méthodes anonymes (y compris, mais sans s'y limiter, les expressions lambda). Si c'est le cas, vous pourriez avoir un problème. Mais cela devrait être correct tant que vous supprimez ces gestionnaires d'événements au bon moment.

+0

Si aucune méthode anonyme n'est utilisée, existe-t-il une différence significative de performance lors de l'utilisation de foreach vs for? – kwcto

+0

La seule façon de savoir est de profiler, mais je suis assez confiant en disant qu'il n'y en aura pas. –

0

Si vous parlez de quelque chose comme ceci:

foreach (var item in items) 
{ 
    item.SomeEvent += delegate { 
     // do something 
    }; 
} 

la réponse est la performance ne se remarque pas (dans mon expérience MonoTouch de toute façon) que le compilateur crée simplement une classe avec une méthode de la même manière la Compilateur Microsoft C#

Les plus gros goulets d'étranglement de performance que j'ai rencontrés dans Monotouch ont été liés à SQLite, et à l'analyse de DateTimes. Tout le reste, y compris les instructions LINQ complexes volent sur le 3GS - Je ne suis pas sûr de ce que la magie est effectuée par le compilateur AOT mais je ne m'inquiéterais si elle se glisse dans 0,5 secondes ou plus pour effectuer la tâche.