IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

appel fonction dans fonction très souvent lenteur


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 107
    Points : 54
    Points
    54
    Par défaut appel fonction dans fonction très souvent lenteur
    Bonjour,

    J'ai fait une fonction A() qui a besoin d'appeler une fonction B() extrêmement souvent ( plusieurs centaine de milliers de fois) et je me demandais si le fais de cet appel pouvait être la cause de la lenteur de mon programme et ne serai-t-il pas mieux que je mette le code de la dite fonction B() à l'intérieur de ma fonction A()?

    Ou est-ce que cela n'est surement pas l'origine de mon problème de lenteur ?

    Merci

    Algernon

  2. #2
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    L'appel d'une fonction est négligeable. De plus si ta fonction est petite elle sera surement inlinée par le JIT.

    Commence par utiliser un outil permettant de tracer le performance de ton application : Tu saura d'où vient précisément ton problème de lenteur

    http://msdn.microsoft.com/en-us/magazine/cc337887.aspx
    http://www.jetbrains.com/profiler/
    http://www.telerik.com/products/memo...-profiler.aspx

  3. #3
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Voici un article très intéressant sur le coût de différentes opérations sous dotnet : Know what things cost.

    Bien entendu ces mesures sont à prendre avec prudence puisque les tests sont simplistes. Notamment un programme réel sera en plus confronté à tous les phénomènes de latence de la mémoire, très bien mis en lumières dans cet autre excellent article : Gallery of processor cache effects.

    Qui plus est le premier article a plusieurs années et entretemps les CPU et le compilateur JIT se sont améliorés. Néanmoins il est très utile d'avoir connaissance de ces ordres de grandeur pour comprendre où l'on navigue. En l’occurrence ici cela nous permet de comprendre que tes 100k appels eux-mêmes n'ont un ordre de grandeur que de 500 microsecondes.

    Enfin, concernant les outils gratuits de profilage du temps d'exécution (je présume que tu n'as que VS express), je te recommande EQATEC Profiler. La seule limite importante de la version gratuite est qu'elle ne peut pas analyser les assemblies signées. Ce qui inclue notamment les bibliothèques du framework dotnet. Si bien que cet outil pourra te dire le temps passé dans ta méthode B mais pas le temps passé par B à appeler StringBuilder.Append() par exemple.

    Voilà, je crois que tu as les trois outils que je recommanderais à un développeur faisant ses premiers pas dans l'optimisation de code.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 107
    Points : 54
    Points
    54
    Par défaut
    Bonjour et merci pour vos réponse, je vais regardeer ces profiler et lire les articels, je vous tiens au courant.

    Algernon

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    avant de conseiller de faire un profiling, j'aurais plutot demandé le code pour voir si on ne pouvait pas l'optimiser
    on ne connait pas le niveau du posteur, et parfois les gens écrivent du code contre performant ...

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2009
    Messages : 38
    Points : 41
    Points
    41
    Par défaut
    Je rejoins l'avis de Pol63, voir le code de la dite fonction B() serait intéressant, les problèmes de lenteur sont très souvent la résultante d'algorithmes mal pensés (non péjoratif).

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/03/2006, 21h18
  2. Appel imbriqué de fonction dans onChange de SELECT
    Par toome dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 06/01/2006, 15h25
  3. Réponses: 6
    Dernier message: 16/11/2005, 20h43
  4. Appel d'une fonction dans uns boucle d'un tableau
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/02/2005, 15h37
  5. Réponses: 4
    Dernier message: 26/01/2005, 13h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo