283 votes

Combien plus rapide est le C++ que c# ?

Ou est-ce maintenant l’inverse ?

De ce que j’ai entendu il y a certains domaines dans lesquels c# s’avère plus rapide que le C++, mais je n’ai jamais eu le courage de le tester par moi-même.

Pensé que quelqu'un d'entre vous pourrait expliquer ces différences en détail ou m’orienter vers le bon endroit pour plus d’informations sur cela.

388voto

Martin Probst Points 3875

Il n'y a pas de stricte raison pour laquelle un code binaire en fonction des langages comme le C# ou Java, qui a une équipe commune d'enquête ne peut pas être aussi rapide que du code C++. Cependant, C++ code utilisé pour être beaucoup plus rapide pour une longue période de temps, et aussi, aujourd'hui encore, dans beaucoup de cas. Ceci est principalement dû à la plus avancée optimisations JIT être compliqué à mettre en œuvre, et la vraiment cool, n'arrivant tout à l'heure.

C++ est plus rapide, dans de nombreux cas. Mais ce n'est qu'une partie de la réponse. Le cas où C++ est en fait plus rapide, sont hautement optimisé programmes, où les programmeurs experts soigneusement optimisé l'enfer hors du code. Ce n'est pas seulement beaucoup de temps (et donc cher), mais aussi souvent conduit à des erreurs dues à la sur-optimisation.

D'autre part, le code dans des langages interprétés devient plus rapide dans les dernières versions du moteur d'exécution (.NET CLR ou de la machine virtuelle Java), sans que vous fassiez quoi que ce soit. Et il y a des tas d'optimisations compilateurs JIT pouvez faire qui sont tout simplement impossible dans les langues avec des pointeurs. En outre, certains prétendent que la collecte des ordures doit généralement être aussi rapide ou plus rapide que le manuel de gestion de la mémoire, et dans de nombreux cas, il est. Vous pouvez généralement mettre en œuvre et de réaliser tout cela en C++ ou en C, mais il va être beaucoup plus compliqué et source d'erreurs.

Comme Donald Knuth a dit, "l'optimisation prématurée est la racine de tout mal". Si vous savez vraiment pour vous assurer que votre demande sera consistent pour la plupart en très critique pour les performances de l'arithmétique, et qu'il sera le goulot d'étranglement, et il va certainement être plus rapide en C++, et vous êtes sûr que C++ n'entre pas en conflit avec d'autres exigences, optez pour C++. Dans les autres cas, se concentrer sur la première mise en œuvre de votre demande correctement dans la langue dans laquelle vous convient le mieux, puis de trouver les goulots d'étranglement des performances si elle est trop lente, et ensuite réfléchir à comment optimiser le code. Dans le pire des cas, vous pourriez avoir besoin de faire appel à du code C par l'intermédiaire d'un étranger interface de la fonction, de sorte que vous aurez toujours la possibilité d'écrire des critiques de pièces dans le langage de plus bas niveau.

Gardez à l'esprit qu'il est relativement facile d'optimiser un programme correct, mais beaucoup plus difficile à corriger un programme optimisé.

En donnant les pourcentages réels de vitesse avantages est impossible, il dépend en grande partie de votre code. Dans de nombreux cas, le langage de programmation de la mise en œuvre n'est même pas le goulot d'étranglement. Prendre des repères au http://shootout.alioth.debian.org/ avec beaucoup de scepticisme, comme ces en grande partie test arithmétique code, ce qui est le plus susceptible de ne pas similaire à votre code.

235voto

mattlant Points 9136

C# ne peut pas être plus rapide, mais ça je vous/ME plus vite. C’est la mesure la plus importante pour ce que je fais. :)

91voto

Konrad Rudolph Points 231505

C’est cinq oranges plus rapidement. Ou plutôt : il ne peut y avoir aucune réponse de couverture (correct). C++ est un langage compilé statiquement (mais il y a optimisation guidée par profil, trop), c# exécute aidée d’un compilateur JIT. Il y a tant de différences que les questions comme « combien plus rapide » ne peut y répondre, pas même en donnant des ordres de grandeur.

64voto

Nemanja Trifunovic Points 17239

Dans mon expérience (et j'ai beaucoup travaillé avec les deux langues), le principal problème avec C# par rapport à C++ est forte consommation de la mémoire, et je n'ai pas trouvé un bon moyen de le contrôler. C'était la consommation de mémoire qui serait éventuellement ralentir .NET logiciel.

Un autre facteur est que le compilateur JIT ne peut pas se permettre trop de temps à faire des optimisations avancées, parce qu'il fonctionne au moment de l'exécution, et l'utilisateur final serait-il un avis si ça prend trop de temps. D'autre part, un compilateur C++ dispose de tous les temps il a besoin pour faire des optimisations au moment de la compilation. Ce facteur est beaucoup moins important que la consommation de mémoire, à mon humble avis.

31voto

Eclipse Points 27662

Exactement de 63,5 %

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X