Moyens d'améliorer l'efficacité de code C#
Comme la plupart d'entre nous, je suis un grand fan de l'amélioration de l'efficacité du code. Tellement que je préfère rapide d'exécution sale code sur quelque chose qui pourrait être plus élégant ou propre, mais plus lent.
Heureusement pour nous tous, dans la plupart des cas, le plus rapide et les solutions plus efficaces sont aussi les plus propres et les plus élégantes de ceux. J'ai l'habitude d'être juste amateur en programmation mais je suis en plein développement temps maintenant, et tout juste de commencer avec le C# et le développement web. J'ai été lire quelques bons livres sur ces sujets, mais malheureusement, les livres couvrent rarement les aspects les plus subtils. Comme, disons, l'un des deux codes qui font la même chose courir plus vite. Ce genre de connaissance vient principalement par le biais de l'expérience seulement. Je demande à tous les collègues programmeurs de partager ces connaissances ici.
Ici, je vais commencer avec ces deux messages de blog, je suis tombé sur. C'est exactement le genre de choses, je suis à la recherche dans ce post:
P. S: Ne laissez-moi savoir si ce genre de chose existe déjà quelque part sur ce site. J'ai cherché mais impossible de trouver, de façon surprenante. Aussi, merci de poster n'importe quel livre vous savez de qui couvre ce genre de choses.
P. P. S: Si vous avez appris à connaître de quelque chose à partir d'un billet de blog ou une ligne source à laquelle nous avons tous accès, alors il serait mieux de poster le lien lui-même de l'omi.
- Quelle est votre question?
- Donc, nous avons tous conclu que vous shoudn pas de faire de l'optimisation prématurée, peut-être question d'origine doit être modifié pour demander d'énumérer les raisons du code de la lenteur, et l'optimisation des trucs qui pourraient aider quand opmizing ces satanés parties de la lenteur de code qui doit être corrigé. Je suis assez nouveau pour DONC et pas tout à fait sûr de savoir comment le faire et ce qui est inapropriate. Promesse de chcek des règles et des lignes directrices pour la SORTE 🙂
- ouais.. je suis tout simplement à la recherche pour des raisons pourquoi le code peut être lent, en fonction de votre expérience.
- "Il y a quatre techniques générales pour l'accélération de l'algorithme: la mise en cache, de compilation, de retarder calcul et d'indexation." --Norvig, PAIP
Vous devez vous connecter pour publier un commentaire.
Une bonne ressource pour .net de performance liés à l'info, c'est Le Blog de Rico Mariani
Il y a quelques choses que vous devriez faire comme utiliser des génériques à la place des objets pour éviter boxing/unboxing et également d'améliorer le code de sécurité, mais la meilleure façon d'optimiser votre code est d'utiliser un profiler pour déterminer quelles parties de votre code sont lents. Il ya beaucoup de grands profileurs pour .NET code disponibles et ils peuvent aider à déterminer les goulots d'étranglement dans vos programmes.
En général, vous ne devriez pas vous préoccuper avec des petits moyens pour améliorer l'efficacité du code, mais au lieu de cela lorsque vous avez terminé de codage, puis profil pour trouver les goulots d'étranglement.
Un bon profiler vous dira des statistiques comme le nombre de fois que la fonction a été exécutée, ce que la moyenne des temps d'exécution a été pour une fonction, ce que le pic de temps de course a été, pour une fonction, ce que le temps total d'exécution a été pour une fonction, etc. Certains profileurs sera même tracer des graphiques pour vous de sorte que vous pouvez voir quelles parties du programme sont les goulots d'étranglement et vous pouvez explorer les dans le sous les appels de fonction.
Sans profilage, vous aurez très probablement être trompés sur la partie de votre programme est lent.
Un exemple d'une grande et libre générateur de profil pour les .NET est le EQATEC Profiler.
La chose la plus importante à ce sujet est la suivante: Ne pas optimiser prématurément!
Il y a seulement un bon moment pour optimiser et c'est quand il y a des contraintes de performance que votre travail en cours de mise en œuvre ne peut pas répondre. Alors vous devriez obtenir un générateur de profils et de vérifier quelles sont les parties de votre code sont lents et comment vous pouvez les corriger.
Réflexion sur l'optimisation lors de l'encodage de la première version est surtout le gaspillage de temps et d'efforts.
++i
vsi++
alors je suis d'accord. D'autre part, si vous faites beaucoup de l'optimisation, vous apprenez à éviter les motifs qui conduisent à une mauvaise performance, en premier lieu, à savoir, exagérée de données de conception de la structure, la dépendance excessive sur les notifications, des prélèvements excessifs, conduisant à de brocoli-type d'appel d'arbres."Je préfère choisir rapide d'exécution sale code sur quelque chose qui pourrait être plus élégant ou propre, mais plus lent."
Si j'avais écrit un pixel moteur de rendu pour un jeu, je pourrais envisager de le faire - toutefois, lorsque la réponse à un clic de l'utilisateur sur un bouton, par exemple, j'avais toujours en faveur de la plus lente, élégant approche plus rapide et sale (sauf si lent > quelques secondes, quand je pourrais reconsidérer).
Je suis d'accord avec les autres postes à profil pour déterminer où votre lent points et ensuite les traiter. L'écriture d'un code optimal dès le départ à plus de problèmes que de sa valeur, vous pourrez généralement trouver que ce que vous pensez sera lente sera très bien et le vrai lent zones va vous surprendre.
IMO c'est la même chose pour toutes les plates-formes de programmation /langages, vous devez utiliser le générateur de profils et voir quelle partie du code sont lents, et puis faire de l'optimisation des pièces.
Bien que ces liens que vous avez fournies sont précieux insig ne pas faire de telles choses à l'avance, mesurez d'abord puis à l'optimiser.
edit:
http://www.codinghorror.com/blog/2009/01/the-sad-tragedy-of-micro-optimization-theater.html
Quand utiliser StringBuilder?
À quel point le fait d'utiliser un StringBuilder devenu insignifiant ou un rétroprojecteur?
Il y a beaucoup de trucs, mais si c'est ce que vous pensez que vous avez besoin, vous avez besoin pour commencer. Le secret de la performance dans aucune langue n'est pas dans les techniques de codage, il est en trouver de quoi optimiser.
Pour faire une analogie, si vous êtes un détective de la police, et vous voulez mettre les voleurs en prison, le cœur de votre entreprise n'est pas à propos de différents types de prisons. C'est sur trouver les voleurs.
Je m'appuie sur une purement manuel méthode de profilage. C'est un exemple de trouver une série de points à optimiser, entraînant une accélération de plusieurs de 43 fois.
Si vous faites cela sur une application existante, vous êtes susceptible de découvrir que la principale cause de la lenteur de la performance est exagérée des données de conception de la structure, il en résulte un excédent de la notification de style de la cohérence de l'entretien, caractérisée par une trop touffue de l'arbre d'appel. Vous devez trouver les appels dans l'arbre d'appel que le coût d'un lot et que vous pouvez le tailler.
Après avoir fait cela, vous pouvez réaliser que d'une façon de concevoir un logiciel qui utilise le minimum de structure de données et des abstractions de courir plus vite pour commencer.
Si vous avez profilé votre code, et manque de rapidité, alors il ya quelques micro-optimisations vous pouvez parfois utiliser. Voici un courte liste.
Micro-optimiser de façon judicieuse, c'est comme le miroir de Harry Potter: si vous n'êtes pas prudent, vous passerez tout votre temps et d'obtenir rien d'autre sans recevoir beaucoup en retour.
Le StringBuilder et à l'exception de jeter les exemples sont bons, ce sont des erreurs que j'ai utilisé pour faire ce qui parfois ajoutés secondes à une exécution de la fonction. Lorsque le profilage, je trouve personnellement, j'utilise beaucoup de cycles simplement trouver choses. Dans ce cas, je cache souvent objets accédés à l'aide d'une table de hachage (ou un dictionnaire).
Bon programme architecture de vous donner une beaucoup meilleure optimisation, que la fonction optimisée.
La plupart d'optimisation est à éviter tous si d'autre dans l'exécution de code, de les mettre tous à initialiser le temps.
Dans l'ensemble, optimisation est une mauvaise idée, parce que le plus précieux est lisible programme, pas un programme rapide.
http://www.techgalaxy.net/Docs/Dev/5ways.htm a quelques très bons points... juste tombée dessus aujourd'hui.