Cela fait un moment que je m'interroge sur cette question.
Bien sûr, certains éléments du C# ne sont pas optimisés pour la vitesse, et l'utilisation de ces objets ou de modifications du langage (comme LinQ) peut rendre le code plus lent.
Mais si vous n'utilisez aucun de ces ajustements, et que vous comparez simplement les mêmes morceaux de code en C# et C++ (il est facile de traduire l'un à l'autre). Sera-t-il vraiment beaucoup plus lent ?
J'ai vu des comparaisons qui montrent que le C# pourrait même être plus rapide dans certains cas, car en théorie le compilateur JIT devrait optimiser le code en temps réel et obtenir de meilleurs résultats :
Il ne faut pas oublier que le compilateur JIT compile le code en temps réel, mais il s'agit d'une surcharge ponctuelle, le même code (une fois atteint et compilé) ne doit pas être compilé à nouveau au moment de l'exécution.
Le GC n'ajoute pas non plus beaucoup de surcharge, sauf si vous créez et détruisez des milliers d'objets (comme en utilisant String au lieu de StringBuilder). Et faire cela en C++ serait également coûteux.
Un autre point que je souhaite soulever est la meilleure communication entre les DLL introduite dans .Net. La plate-forme .Net communique beaucoup mieux que les DLL basées sur Managed COM.
Je ne vois pas de raison inhérente pour laquelle le langage devrait être plus lent, et je ne pense pas vraiment que C# soit plus lent que C++ (à la fois par expérience et par manque de bonne explication) .
Ainsi, un morceau du même code écrit en C# sera-t-il plus lent que le même code en C++ ?
Et si oui, alors POURQUOI ?
Une autre référence (qui en parle un peu, mais sans explication sur le POURQUOI) :
0 votes
Parce que C# est beaucoup plus facile à utiliser que C++, surtout en ce qui concerne l'interface graphique.
0 votes
@Brain pouvez-vous expliquer "depends", je ne l'ai pas compris ?
3 votes
Vraiment... Ca dépend... Certaines choses sont plus rapides, d'autres plus lentes. Le C/C++ est plus "déterministe" (pas de ramasse-miettes dans le dos). Si vous voulez créer 100 threads, je peux vous dire que le GC vous hantera par sa lenteur (et avant de me dire que 100 threads sont trop nombreux, sachez que Skype et l'AV de McAfee sont chacun à 40 threads maintenant sur mon PC)... Marshaling en C# est une douleur (et c'est plus lent). Le codage est assez rapide. Non, ce n'est pas une attaque. Je préfère vraiment C#.
1 votes
Je pense que cette question devrait être modifiée et rouverte. Je pense que l'auteur de la question ne comprend peut-être pas qu'une question plus fondamentale a un impact sur les différences de performances entre C# et des langages comme C ou C++, qui serait "Quelle est la différence entre le code généré (et la façon dont il est exécuté) par un compilateur C et le code généré par le compilateur C# ?" C#/Java et d'autres langages interprétés ou VM peuvent avoir plusieurs étapes intermédiaires lors de l'exécution de leur bytecode qui sont totalement absentes dans un programme C équivalent.
0 votes
Si vous voulez un exemple concret, j'ai récemment dû porter un algorithme C++ assez important en C#. Je l'ai fait ligne par ligne, en traduisant les constructions/structures C++ en équivalents C# (par exemple, map --> sortedlist etc.). Eh bien, bien que je m'attendais à ce que c++ soit plus rapide, ce n'était pas le cas. Le C# était légèrement plus rapide, mais je peux dire que les performances de base étaient les mêmes. (Et BTW le projet C++ était bien écrit, pas de fuites de mémoire etc...). Donc, C/C++ plus rapide que C# n'est pas une vérité absolue...
3 votes
Pendant que vous pourrait soutenir que (comme indiqué) cela peut être qualifié de "pas une vraie question", prétendre que c'est subjectif est absurde. "Est-ce que A est plus rapide que B" est une question qui peut être mesurée objectivement. Même si la réponse obtenue par cette mesure est ambiguë (certaines choses sont plus rapides dans l'un, d'autres dans l'autre), elle reste objective.
0 votes
@Jerry : Je suis d'accord avec vous, et j'ai donc voté pour la réouverture du sujet !
0 votes
Je suis au courant du code intermédiaire. C'est pourquoi je n'ai pas posé de question à ce sujet.
0 votes
Ce sujet a fait l'objet de nombreuses discussions et de nombreuses réponses erronées. J'ai donc pensé à le poser ici et à voir ce que nous trouverons :) ... Je suis heureux de voir qu'il est resté ouvert.
1 votes
Ver le jeu de référence des langages informatiques pour une comparaison approfondie de nombreux langages sur de nombreux types de problèmes différents.
0 votes
L'utilisation de C++ ne permet pas automatiquement d'obtenir un programme plus rapide. Le C++ vous donne un bien meilleur contrôle sur les caractéristiques de performance de votre programme, ce qui vous permet d'écrire un programme plus rapide, mais cela peut représenter beaucoup de travail.