2008-12-19 5 views
23

Existe-t-il des tests de performance pour Mono comparé à Java dans GNU/Linux?Performance mono

Avez-vous déjà testé les performances de Mono?

+3

Quelqu'un voudrait-il revoir ce maintenant que C# 4.0 est sorti? – user482594

+0

@ user482594 - J'ai fourni un lien à jour dans ma réponse qui devrait rester à jour: http://stackoverflow.com/a/9138207/332026 – Justin

+1

@ user482594 - Le jeu de benchmarks montre Mono 2.10.9, ce qui est le cas fournir C# 4.0 - mais cela ne signifie pas que les programmes C# ont été réécrits pour utiliser les fonctionnalités C# 4.0. – igouy

Répondre

12

Il y a un post intéressant de Miguel à ce sujet.

« Alvaro souligne que dans le Langue Shootout Benchmark Mono est à la 18ème place par rapport au 10 place de Java.

Nous savons que l'édition Java propriétaire de Sun (pas open source un, comme que l'on ne trouve nulle part encore) est plus rapide que Mono, mais j'étais surpris que nous étions si loin derrière Donc, j'ai regardé la comparaison entre Java6 et Mono. "

Comparison - Java and Mono http://tirania.org/pictures/javavsmono.png

See Details Here

+5

Ce graphique est bien dépassé! Voici l'une des 4 comparaisons de jeux de benchmarks actuels - http://benchmarksgame.alioth.debian.org/u32/csharp.php – igouy

+0

@igouy Ce lien ne se charge pas! – styfle

+0

La machine hébergeant le stockage pour alioth.debian.org a subi une panne de disque catastrophique. http://lists.debian.org/debian-infrastructure-announce/2013/11/msg00001.html – igouy

2

Mon indice de référence (en utilisant des problèmes mathématiques complexes et la manipulation de la mémoire (avec des chaînes brutes)):

MonoDevelop de Windows (en cours d'exécution sur la console en utilisant .net 3.5): Realizando Calculos em ... 535 itens 1.000.000 Realizando Operações com cordes Longas ... 2.038 Realizando Cálculos em ... 530 itens 1.000.000 Realizando Operações com cordes Longas ... 1.962 Realizando Cálculos em ... 530 itens 1.000.000 Realizando Operações com cordes Longas. .. 1.963

Utilisation de mono.exe sur Windows: Realizando cálculos em 1.000.000 itens ... 6.875 Realizando fonctionne avec des chaînes longues ... 6.206 Realizando cálculos em 1.000.000 itens ... 6.840 Realizando fonctionne avec des chaînes longues .. . 6.114 Realizando Cálculos em ... 6,857 itens 1.000.000 Realizando Operações com cordes Longas ... 6,116

en utilisant mono sur Linux Ubuntu: Realizando Cálculos em ... 5934 itens 1.000.000 Realizando Operações com cordes longues ... 6,915 Realizando cálculos em 1.000.000 articles ... 6,034 opérations de la scène avec des chaînes longues ... 7,489 effectuer des calculs 1.000.000 articles ... 5740 d'effectuer des opérations avec des chaînes longues ... 6731

code source même, mais sur Visual Studio 2008: la réalisation des calculs 1.000.000 articles ... 588 Exécution d'opérations avec des chaînes longues ... 1289 calculs du spectacle 1.000.000 articles ... 566 Exécution d'opérations avec des chaînes longues ... 1320 la réalisation des calculs 1.000.000 articles ... 702 opérations Jouer avec les longues chaînes ... 1393

VS 2008 a généré exe avec NGEN (executable natif): effectuer des calculs 1.000.000 articles ... 567 opérations de la scène avec des chaînes longues ... 1255 calculs du spectacle 1.000.000 articles ... 563 Exécution d'opérations avec des chaînes longues ... 1269 la réalisation des calculs 1.000.000 articles 562 ... en effectuant des opérations avec des chaînes longues

... 1263

dans ces tests, mono est plus lent que 10x .NET 3.5 SP 1 = (

+1

Publiez votre code de benchmark sur mono-devel-list ou mettez un lien ici afin que nous puissions voir ce qu'il se passe avec ce code. – lupus

2

C++, C# (Mono), et C VALA:

http://jpaflacerda.wordpress.com/2011/11/08/vala-benchmarking/ De nombreuses langues

: http://attractivechaos.github.com/plb/

Conclusion: Mono a évolué beaucoup, mais il est encore lent comparé à d'autres langues disponibles. Je me suis intéressé à Moat, qui a presque la même syntaxe de C#, mais est plus rapide que simple C dans certains cas.

+0

Il est clair que Vala ne peut pas être "plus rapide" que C lorsqu'il compile vers C un langage intermédiaire. Vala est vraiment juste un générateur de code C. Ce n'est pas une insulte cependant. Je pense que Vala est génial. – Justin

+0

Oui, vous avez raison. Il ne sera jamais "plus rapide que C", mais il pourrait être plus rapide que _usual C_ parce qu'il peut traduire en code C très bien optimisé et savoir exactement quels drapeaux devraient être dans le compilateur pour obtenir les meilleures performances (je ne dis pas ça fait déjà tout cela, mais ça pourrait). En outre, les résultats de référence sont là. Et oui, Vala est génial :) –

28

La dernière version de ce shoot-out se trouvent here.

En un mot, par rapport à Java, Mono utilise beaucoup moins de mémoire et fonctionne un peu plus lent.

Pour garder les choses en perspective, les deux ils courent la même vitesse dans le grand schéma des choses. Ils Ces deux tests exécutés ordres de grandeur plus rapide que les langues comme Ruby, LUA, Python, PHP et Perl. Les deux Ils sont dans le ballon parc même que Pascal, OCAML, Haskell, Lisp et environ la moitié eux ce qui rend le jeûne comme C et C++. here Cliquez pour plus de détails.

Pour pinailler, Cornichons clairs Que nos réponses comparer ici Java et C# Mono. Les deux mono et environnements JVM sont ciblés par différentes langues et le choix des questions linguistiques. Par exemple, si l'on compare F # sur Mono avec Clojure sur la machine virtuelle Java, nous obtenons des résultats totalement différents et tout à coup « Mono » est « faster ».

Bien que ces comparaisons sont intéressantes et instructives, vous devez les prendre avec un grain de sel. Tout d'abord, bien que certains de personnes, la plupart des gens qui écrivent du code Java et C# ne sont pas en cours d'exécution, mais rien algorithmes numériques dans des boucles serrées. En second lieu, dans certaines de ces langues, les algorithmes testés peuvent être simplement appeler dans les bibliothèques sont Qué écrites en C et non pas dans la langue cible du tout. Enfin, d'autres points de référence (et mises en œuvre) devraient donner des résultats différents probables.

Pourtant, il est raisonnable de conclure que go est beaucoup plus rapide que Ruby, C++ est plus rapide que Go et Java et C# assez EFFECTUER raisonnablement Compte tenu de la façon dont ils sont productifs (à mon humble avis).

1

La plupart des points de référence sont basés sur le calcul lourd de boucles serrées. Le temps commence à compter juste avant la boucle et arrêter juste après.Si votre application effectue un traitement de données important, évitez C# et Java, optez simplement pour C/C++.

Il est plus probable que votre application soit côté serveur. Qu'il devra accepter les requêtes, récupérer les données et les renvoyer. Dans un tel scénario, la vitesse brute du code généré n'est pas pertinente par rapport aux autres paramètres. Vous feriez mieux de regarder l'efficacité du framework sous-jacent, la rapidité de la phase d'initialisation précédant l'exécution de votre code, comment il est facile d'implémenter des technologies efficaces comme des E/S non bloquantes, comment la mémoire est-elle libérée? et processus recyclé après l'exécution du code. À quel point est-il facile de déployer du code, de le faire évoluer ...

Le paramètre humain est encore plus important que tout cela. Un Java mal écrit est plus lent qu'un bon C# et vice versa. Vous devez donc vérifier vos développeurs. Quelle langue maîtrisent-ils, quel outil préfèrent-ils? Sont-ils des dépendants VS/resharper ou peuvent-ils utiliser Java IDE? Le temps passé à apprendre un nouveau langage ou un IDE ne sera pas dépensé pour écrire un code meilleur et plus optimisé.