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

Affichage des résultats du sondage: Quel est le meilleur des deux langages selon vous ?

Votants
1184. Vous ne pouvez pas participer à ce sondage.
  • Je suis intéréssé par Java et C#

    240 20,27%
  • C#

    377 31,84%
  • Java

    368 31,08%
  • J'apprécie le fait d'avoir l'alternative Java ou C#

    108 9,12%
  • Ni l'un ni l'autre

    36 3,04%
  • Sans opinion

    46 3,89%
  • Autre avis ? (précisez...)

    9 0,76%
C# Discussion :

C# versus Java [Débat]


Sujet :

C#

  1. #201
    Inscrit

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Points : 1 229
    Points
    1 229
    Par défaut
    Citation Envoyé par gouessej Voir le message
    Là n'est pas le problème. A ma connaissance, 89% des postes client sont sous Windows, moi je ne parlais pas de ça, j'évoquais les risques autour de Mono pour développer en C# sur d'autres systèmes d'exploitation.
    J'avais bien compris. Mais si MS à standardisé et ouvert tout ça, c'est justement aussi pour permettre des initiatives comme Mono.


    Citation Envoyé par gouessej Voir le message
    C'est de l'intuition pour l'essentiel,
    Complètement, mais ça me semblerait logique.

    Citation Envoyé par gouessej Voir le message
    Comment Java pourrait être 2 à 3 fois plus lent que C# si Java peut aller légèrement plus vite que des langages natifs? Si c'est vrai, ça veut dire que C# est 2 à 3 fois plus rapides que des langages natifs, non? Ca ne paraît pas tiré par les cheveux?
    Tu réponds toi-même à la question. Ce benchmark est biaisé en plus d'être passé de date...

    A l'heure actuelle, je ne pense pas qu'il soit possible de trouver un scénario objectif dans lequel l'une ou l'autre des technologies soit supérieure à l'autre dans de telles proportions.
    In my experience, any attempt to make any system idiot proof will only challenge God to make a better idiot.

  2. #202
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Types valeurs: Le plus simple, c'est de regarder le type DateTime de .Net, ou l'équivalent en java. Dans les deux cas, ces types sont immuables.
    Imagine que je veuille une date deux heures, trois minutes et dix secondes après "maintenant".

    En .Net: DateTime dt = DateTime.Now.AddHours(2).AddMinutes(3).AddSeconds(10).
    Je ne connais pas la syntaxe java, mais je sais qu'elle est similaire. Maintenant, au niveau performance:
    • En .Net, DateTime est un type valeur qui correspond tout simplement à un long, donc aucune allocation dynamique n'a eu lieu. C'est comme si chaque fonction avait retourné un long.
    • En Java, à chaque opération on a fait un new Date, donc une allocation dynamique.
    En effet je comprend mieux ton exemple maintenant avec les types valeurs tout ceci se limite à de l'arithmétique, alors que cela implique la création d'objets multiples avec des objets immuables...

    Mais pour limiter la création d'objet temporaire il suffirait d'utiliser une fabrique ou l'objet mutable correspondant. C'est généralement ce qui se fait lorsqu'on manipule des objets immuables (comme par exemple avec String et les StringBuffer/StringBuilder).

    (au passage je reconnais que l'API Date de Java est vraiment pourri, et il faut se tourner vers l'API JodaTime pour avoir des MutableDateTime/DateTime).

    Citation Envoyé par Médinoc Voir le message
    Pour le passage par référence, c'est encore plus simple: Écris-moi une fonction java qui retourne deux long. Puis essaie de la réécrire pour qu'elle retourne deux long sans qu'aucune allocation dynamique soit faite.
    Il faudrait utiliser un tableau ou un type conteneur (et donc de l'allocation je sais ).
    Je ne sais pas si c'est dû à l'absence de passage par référence... mais c'est quelque chose que je ne fais jamais et dont je serais plutôt réticent à utiliser !
    Vous utilisez souvent cela en C# ??? Cela ne se rapproche-t-il pas plus du procédural que de l'Objet ?


    Mais pensez-vous réellement que ces deux concepts apportent vraiment de meilleures performances dans un programme standard ?
    Je veux dire par là que dans des cas extrêmes certaines situations peuvent avantager une plateforme ou l'autre, mais en utilisation normale ces différences sont minimes (dans un cas comme pour l'autre).

    Mais perso je pensais plutôt que vous alliez me citer des optimisations du compilateur (standard ou JIT) dans tel ou tel domaine...


    a++

  3. #203
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bricecol Voir le message
    Premier point : Je n'ai jamais nié le fait que
    je préfère JAVA aux langages .NET
    et je
    n'ai jamais prétendu être objectif
    ,
    bien au contraire. Donc les remarques du genre
    "mauvaise argumentation" ou alors "peu crédible"
    non pas lieu d'êtres ici, je pense.
    Ceci me concerne directement : Pourquoi avoir truffé ton message de M$ alors ? Ton post ressemble a un panneau "Microsoft c'est le Mal" et n'apporte aucune argumentation technique...

    Pire tes comparaisons portent sur VB.NET ou VS Studio... et on parle de C#

    a++

    PS : Et je suis un développeur Java

  4. #204
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Je ne sais pas si c'est dû à l'absence de passage par référence... mais c'est quelque chose que je ne fais jamais et dont je serais plutôt réticent à utiliser !
    Vous utilisez souvent cela en C# ??? Cela ne se rapproche-t-il pas plus du procédural que de l'Objet ?
    Un exemple classique en C#, c'est la consultation de conteneur associatif. Quand on sait qu'une exception est lente et réveille le debugger, on la réserve aux cas exceptionnels. C'est là qu'entre en scène la fonction Dictionary<TKey, TValue>.TryGetValue() :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    bool TryGetValue(TKey key, out TValue value);
    Bien sûr, ici ça ressemble à du procédural, et il est plus "simple" de lancer une exception. Plus simple, mais là encore, plus lent.

    Mais on pourrait aussi avoir une fonction de ce genre:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    static void Divise(int dividende, int diviseur, out int quotient, out int reste);
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #205
    Inscrit

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Points : 1 229
    Points
    1 229
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Vous utilisez souvent cela en C# ???
    Honnêtement non.

    D'ailleurs l'exemple donné par Médinoc fait partie d'un pattern plus général parfois nommé "TryParse" et qui se rencontre assez rarement dans le framework.

    Les cas d'utilisation les plus courant sont justement des méthodes d'essai de conversion où lancer une exception serait coûteux et limite dangereux...

    Par contre :

    Citation Envoyé par Médinoc Voir le message
    Mais on pourrait aussi avoir une fonction de ce genre:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    static void Divise(int dividende, int diviseur, out int quotient, out int reste);
    même si ce genre de code est acceptable, il est plutôt recommandé d'utiliser une structure dans ce genre de cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public struct DivisionResult
    {
      public int Quotient { get; }
      public int Reste { get; }
    }
     
    static DivisionResult Divise(int dividende, int diviseur);
    on y gagne en propreté...
    In my experience, any attempt to make any system idiot proof will only challenge God to make a better idiot.

  6. #206
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Vu qu'une struct crée un type valeur, ça passe. Par contre, s'il fallait créer un nouvel objet à chaque division, là on aurait des problèmes...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #207
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Keihilin Voir le message
    J'avais bien compris. Mais si MS à standardisé et ouvert tout ça, c'est justement aussi pour permettre des initiatives comme Mono.
    Personnellement, je n'emploie pas le mot "ouverture" dans ce cas, c'est vague. Selon wikipedia :
    Le portage vers Mono de composants .NET non soumis à l'ECMA pour standardisation exposa le projet à des poursuites pour violations de brevets logiciels, et ce depuis le début. Ce risque n'est pas lié aux technologies soumises à l'ECMA, comme C#, ni aux bibliothèques ou autres couches logicielles du projet GNU. Ces brevets concernent des technologies développées par Microsoft et constituant en partie le framework .NET, comme ASP.NET, ADO.NET ou la couche communication du framework .NET 3.0 (Windows Communication Foundation)... Ces technologies ne sont pas totalement mises en œuvre à ce jour, mais sont vitales pour les versions futures de Mono.
    Pour l'instant, ça ne touche pas directement C#.

  8. #208
    Inscrit

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Points : 1 229
    Points
    1 229
    Par défaut
    Citation Envoyé par gouessej Voir le message
    Pour l'instant, ça ne touche pas directement C#.
    J'avais effectivement connaissance de ces problèmes sur quelques parties spécifiques du framework, et je ne te cache pas que je trouve ça dommage...

    D'autant plus que tout cela est implémenté de telle manière qu'il est très difficile d'extraire ces parties du framework; il y a une adhérence très forte et ça doit juste être un cauchemard de développer Mono en contournant ces parties protégées.
    In my experience, any attempt to make any system idiot proof will only challenge God to make a better idiot.

  9. #209
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Ceci me concerne directement : Pourquoi avoir truffé ton message de M$ alors ? Ton post ressemble a un panneau "Microsoft c'est le Mal" et n'apporte aucune argumentation technique...
    Dans ce cas, je peux aussi écrire "$un c'est le mal" vu les propos à vomir (selon moi) que certains dirigeants de cette entreprise ont tenu sur la flexibilité du travail en pleine période de mouvement contre le CPE. Chaque entreprise privée a ses stratégies, aucune ne fait de la philanthropie, certaines entreprises sont prêtes à faire des choses pas très éthiques pour arriver à leur fin mais de l'autre côté, quand on nous jette des cacahouètes (passage de Java sous licence GPL), on ne doit pas être dupes sur le fait qu'il y ait une contrepartie, un intérêt pour celui qui fait ça. Cependant, on sort du domaine strictement technique pour en arriver à des choix de société, des choix politiques et cela ne veut pas dire qu'on ne doive pas se justifier, argumenter.
    Le débat doit-il donc porter uniquement sur des éléments techniques? Je ne prétends pas détenir la réponse.

    Sur le fond, je suis peut-être d'accord avec bricecol mais est-ce le lieu pour parler de ça? Ecrire juste "M$" ne me dit pas grand chose.

  10. #210
    Membre éclairé
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Points : 654
    Points
    654
    Par défaut
    il est courant de voir m$ comme abréviation pour microsoft. on ne peut pas nier leurs actions dans le domaine informatique, plus que douteuses. je n'attaque pas personnellement les développeurs de microsoft mais leur stratégie grosso modo (bill qt à lui fait de gros dons à pas mal d'associations humanitaires, et c'est quelque chose que je respecte bcp).

    j'ai bien compris que parler de formatage entre VS et .NET ne veut rien dire, mais franchement, vous avez compris ce que je voulais dire non ? Alors pourquoi enfoncer le clou ? (C# est un langage des technos .NET non ?)

    je tiens à signaler avec quelle tact les messages précédents m'ont remis "à ma place" très gentiellement... et encore merci d'intinuer que je suis un crétin.

    bon débat, a+.
    merci gouessej
    "Computers are like Old Testament gods ; Lots of rules and no mercy"
    [ Les ordinateurs sont comme les dieux de l’Ancien testament ; Beaucoup de règles et aucune pitié. ] Joseph Campbell

  11. #211
    Invité
    Invité(e)
    Par défaut
    Je disais il y a peu que le framework me gênais car il était source de bug (surtout pour la partie ASP.net, du style "comment je fait pour connaitre le commandname ainsi que la commandargument en même temps ?"), et qu'il était beaucoup trop en boite noire : le code HTML est très peu customisable, ce qui est essentiel quand on a des besoin spécifiques.

    Mais oh ma joie ce matin quand j'ai découvert MonoRail , le bijoux ! Problème : comment convaincre mes collègues de passer les 2 ans de taff sur asp.net sur monorail...

    Conclusion : Le .net c'est bien sympa mais ils essaient trop d'étouffer les autres initiatives qui sont difficiles d'accès, du coup on part sur la solution officielle et 2 ans après on en trouve une meilleure.

    EN Java tu commence ton projet, tu te dit "quel framework utiliser ?" la tu te dit "on va prendre le framework de base car soutenu par MS". Suffit de voir la petitesse des autres communauté comparé a la supériorité de leur produit (Monorail c'est un peu comme de l'or en barre, rien a redire a part la communauté).

    Quand je parlais d'apache c'est car pour moi quand on travaille en java (pour le web), on travaille avec apache et pareil pour c# / IIS. Et si on compare des langage, on compare tout ce qui viens avec (sinon on compare que la syntaxe).

    Au niveau des perfs je suis pas sur qu'il y ai débat sur des histoires de benchmark et d'algo qui font 30 000 fois les même chose.
    Je pense que la comparaison se fait de manière "générale" : est il aisé de faire une appli en java qui tourne aussi vite qu'une appli c# ? c'est bien sympa de connaitre toutes les spécificités d'une machine virtuelle, mais c'est pas donné a tout le monde et l'intérêt de notre métier est d'être productif le plus vite possible, pas après 10 ans d'expérience ( j'exagère ).

  12. #212
    Inscrit

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Points : 1 229
    Points
    1 229
    Par défaut
    Citation Envoyé par Bourgui Voir le message
    Je disais il y a peu que le framework me gênais car il était source de bug (surtout pour la partie ASP.net, du style "comment je fait pour connaitre le commandname ainsi que la commandargument en même temps ?"),
    Hein ?

    CommandName et CommandArgument étant 2 propriétés de CommandEventArgs, je ne suis pas sûr de bien comprendre ta question...

    Citation Envoyé par Bourgui Voir le message
    et qu'il était beaucoup trop en boite noire : le code HTML est très peu customisable, ce qui est essentiel quand on a des besoin spécifiques.
    Pas d'accord, mais alors vraiment pas !

    J'ai beaucoup de critiques à formuler à l'égard d'asp.net, mais dire que le code HTML n'est pas "customisable" est complètement faux.

    • Tu as la possibilité d'écrire tes propres contrôles.
    • Les méthodes chargées du rendu sont "overridable" dans les contrôles existants, tu peux donc hériter et redéfinir.
    • Le modèle d'événements permet d'intercepter le début du rendu et de modifier ce que tu veux...


    bref, ce ne sont pas les moyens qui manquent pour "customiser" le HTML.


    Citation Envoyé par Bourgui Voir le message
    Conclusion : Le .net c'est bien sympa mais ils essaient trop d'étouffer les autres initiatives qui sont difficiles d'accès, du coup on part sur la solution officielle et 2 ans après on en trouve une meilleure.
    J'ai jamais entendu un membre de castleproject se plaindre d'être étouffé par asp.net.

    MonoRail est un bon framework qui force à adopter une démarche spécifique...démarche qui peut parfaitement être adoptée avec asp.net.

    Par ailleurs (et tu rendras peut être compte par toi-même), MonoRail n'est de loin pas la panacée. On se retrouve vite avec des vues qui mélangent allègrement tags et pseudo-scripting-code dans tous les sens, comme à la "fabuleuse" époque d'ASP (tout court)...

    --> Productivité
    --> Testabilité
    --> Maintenance
    In my experience, any attempt to make any system idiot proof will only challenge God to make a better idiot.

  13. #213
    Invité
    Invité(e)
    Par défaut
    On va pas partir dans une discussion en tete a tete, meme si ça peut etre marrant, mais quand meme

    "CommandName et CommandArgument étant 2 propriétés de CommandEventArgs, je ne suis pas sûr de bien comprendre ta question..."
    Sauf que dans le cas d'une gridview et d'un onitemcommand event levé, la propriété CommandName n'est pas initialisée, et elle ne l'est que dans l'évènement OnSelectedIndexChanged. Tante de faire une GridView avec une fonction appelée par onitemcommand et tu verra que dans l'évènement tu ne eptu accéder que au commandargument. 1 demi journée de bricolage pour en venir a cette conclusion. J'en suis qu'a 1 an et demi d'expérience sur asp.net mais j'estime personnellement que ça devrait etre suffisant pour savoir comment maitriser pleinement le rendu HTML de mes pages web.

    Un autre exemple ? Crée un répertoire virtuel sous IIS 6 et tente d'y accéder avec Server.MapPath, maintenant tante la même avec IIS 5 ... pour trouver pourquoi ça ne marche pas ben c'est pas évident du premier coup d'oeil (attention je ne dit pas que java est parfait je suis partagé entre les deux). Ou pourquoi les sites générés par ce framework plante sur les MAC ? (oké on vire le viewstate mais a quoi sert une techno qu'on doit virer ?) Ou pourquoi y a t il des erreur dans le framework ajax qui ne surviennent que sur IE ? je m'égare un peu mais tout ça pour décrire la sensation que l'on a au jour le jour avec .Net : on y vois rien et ce qu'on vois pas est pas nikel.

    Pour ce qui est du HTML : pourquoi utiliser un framework si c'est pour tout refaire ?

    Je me suis peut être mal exprimé avec le mot "étouffé" mais je voulais dire "cache". Quand je taffais en Java j'avais l'impression de connaitre (quasiment) tout les outils a ma disposition, et d'avoir choisis en âme et conscience ceux qui me correspondais le mieux.

    Pour ce qui est de la qualité de monorail, personnellement j'aime beaucoup NVelocity car il ressemble énormément a smarty (php) et je trouve ça 12 fois plus agréable de voir du html du vrai avec des id des vrais que des balises asp.net. Et pour afficher un table d'objet je préfère des "for" a des "databinder et compagnie".

  14. #214
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Vu qu'une struct crée un type valeur, ça passe. Par contre, s'il fallait créer un nouvel objet à chaque division, là on aurait des problèmes...
    C'est ca que j'ai du mal à comprendre : dans un cas on a une copie de valeur et dans l'autre une copie de référence. Perso je pense que c'est vraiment très proche d'un point de vue performance...


    Comme j'ai un SDK .NET sur ce poste j'ai fait quelques essais. Attention j'annonce la couleur de suite : il s'agit seulement d'un runtime 1.1.4322. Je sais qu'on en est à la version 3.0 mais c'est tout ce que j'ai sous la main...

    Donc j'ai repris l'exemple de la méthode Divise() et je l'ai adapté en utilisant les 3 cas (avec le passage par référence, avec une struct et avec une classe).

    Mes connaissance en C# étant quasi-nulle, j'ai aboutit au code suivant (n'hésitez pas à signaler tout problème éventuel) :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    using System;
     
    namespace test
    {
     
    	public struct DivisionResult
    	{
    		public int Quotient;
    		public int Reste;
    	}
     
    	public class DivisionResultClass
    	{
    		private int Quotient;
    		private int Reste;
     
    		public DivisionResultClass(int dividende, int diviseur)
    		{
    			Quotient = dividende/diviseur;
    			Reste = dividende%diviseur;
    		}
    	}
     
    	class Main0
    	{
     
     
     
    		static void Divise0(int dividende, int diviseur, out int quotient, out int reste)
    		{
    			quotient = dividende/diviseur;
    			reste = dividende%diviseur;
    		}
     
    		static DivisionResult Divise1(int dividende, int diviseur)
    		{
    			DivisionResult result;
    			result.Quotient = dividende/diviseur;
    			result.Reste = dividende%diviseur;
    			return result;
    		}
     
    		static DivisionResultClass Divise2(int dividende, int diviseur)
    		{
    			return new DivisionResultClass(dividende, diviseur);
    		}
     
    		[STAThread]
    		static void Main()
    		{
    			long start, stop;
    			int size = 500000000;
     
    			start = DateTime.Now.Ticks;
    			for (int i=0; i<size; i++)
    			{
    				int q, r;
    				Divise0(i, 3, out q, out r);
    			}
    			stop = DateTime.Now.Ticks;
    			Console.WriteLine("Time : {0} ns, soit {1} s", (stop-start)*100, ((stop-start)*100)/1000000000.0 );
     
    			start = DateTime.Now.Ticks;
    			for (int i=0; i<size; i++)
    			{
    				DivisionResult r = Divise1(i, 3);
    			}
    			stop = DateTime.Now.Ticks;
    			Console.WriteLine("Time : {0} ns, soit {1} s", (stop-start)*100, ((stop-start)*100)/1000000000.0 );
     
     
    			start = DateTime.Now.Ticks;
    			for (int i=0; i<size; i++)
    			{
    				DivisionResultClass r = Divise2(i, 3);
    			}
    			stop = DateTime.Now.Ticks;
    			Console.WriteLine("Time : {0} ns, soit {1} s", (stop-start)*100, ((stop-start)*100)/1000000000.0 );
    		}
    	}
    }


    J'ai compiler cela avec csc en ligne de commande comme ceci :
    Et j'ai exécuté le programme natif généré qui me donne les résultats suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Time : 15359473300 ns, soit 15,3594733 s
    Time : 15078159700 ns, soit 15,0781597 s
    Time : 17140625000 ns, soit 17,140625 s
    Le passage par référence n'est pas plus rapide que l'utilisation des structs, et si l'utilisation des classes prend 2 secondes supplémentaires, cela ne représente au final que 4 nanosecondes par appels...

    C'est pour cela que je doute toujours de l'intérêt de cela du point de vue des performances de tout cela dans une application concrète...




    A titre de comparaison le code équivalent en Java utilisant une classe pourrait correspondre à ceci :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    class DivisionResult {
    	private final int quotient;
    	private final int reste;
     
    	public DivisionResult(int dividende, int diviseur) {
    		quotient = dividende/diviseur;
    		reste = dividende%diviseur;
    	}
    }
     
    public class Main {
     
     
    	static DivisionResult divise(int dividende, int diviseur) {
    		return new DivisionResult(dividende, diviseur);
    	}
     
    	public static void main(String[] args) {
     
    		long start, stop;
    		int size = 500000000;
     
    		start = System.nanoTime();
    		for (int i=0; i<size; i++) {
    			DivisionResult r = divise(i, 3);
    		}
    		stop = System.nanoTime();
    		System.out.printf("Time : %d ns, soit %f s%n", stop-start, (stop-start)/1000000000.0 );
    	}
    }
    Après compilation (javac Main.java) et exécution (java Main) avec Java 6 cela me donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Time : 16212595075 ns, soit 16,212595 s
    Soit un résultat intermédiaire des résultats de C#...


    A noter que si l'on utilise la JVM server (java -server Main) qui correspond à la version la plus optimisé, on divise le temps par 4 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Time : 4101082156 ns, soit 4,101082 s


    Bien sûr tout cela est à prendre avec des pincettes : j'utilise un vieux runtime .NET et je n'ai utilisé aucune option d'optimisation (tout simplement car j'ignore totalement comment faire cela).


    N'hésitez pas à commenter/critiquer et apporter plus d'info

    a++

  15. #215
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Je n'ai jamais dit que la copie d'une référence coûtait cher: J'ai dit que l'allocation d'un nouvel objet coûtait cher.
    Et ça, le C# propose des concepts permettant de l'éviter.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #216
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par adiGuba Voir le message

    Comme j'ai un SDK .NET sur ce poste j'ai fait quelques essais. Attention j'annonce la couleur de suite : il s'agit seulement d'un runtime 1.1.4322. Je sais qu'on en est à la version 3.0 mais c'est tout ce que j'ai sous la main...

    Bien sûr tout cela est à prendre avec des pincettes : j'utilise un vieux runtime .NET et je n'ai utilisé aucune option d'optimisation (tout simplement car j'ignore totalement comment faire cela).
    non non je confirme dans une SSII où je suis nous utilisons bien la version 1.1 pour tout les logiciels c'est donc une réalité d'entreprise.

    Pourquoi la 1.1 plutot que la dernière ? Parce qu'à priori c'est la seule version actuelle qui soit stable.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  17. #217
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Le Framework 2.0 n'est pas stable?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #218
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Je n'ai jamais dit que la copie d'une référence coûtait cher: J'ai dit que l'allocation d'un nouvel objet coûtait cher.
    Justement avec une gestion de la mémoire par un GC, le coût de l'allocation dynamique n'est plus aussi cher qu'avec une gestion manuelle tel qu'on peut l'avoir en C ou C++

    Citation Envoyé par Médinoc Voir le message
    Le Framework 2.0 n'est pas stable?
    En entreprise les temps de migration sont beaucoup plus lent. Mais je te rassure ce n'est pas propre à .Net on retrouve la même chose en Java

    a++

  19. #219
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Justement avec une gestion de la mémoire par un GC, le coût de l'allocation dynamique n'est plus aussi cher qu'avec une gestion manuelle tel qu'on peut l'avoir en C ou C++

    pas aussi cher ne signifie pas "quand même beaucoup plus cher qu'une allocation statique"
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  20. #220
    Inscrit

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Points : 1 229
    Points
    1 229
    Par défaut
    Citation Envoyé par Bourgui Voir le message
    Tante de faire une GridView avec une fonction appelée par onitemcommand et tu verra que dans l'évènement tu ne eptu accéder que au commandargument.
    Je regarderai...

    Citation Envoyé par Bourgui Voir le message
    Ou pourquoi y a t il des erreur dans le framework ajax qui ne surviennent que sur IE ?
    Parce qu'IE est sans nul doute le production de Microsoft la plus catastrophique, loin devant Millenium !

    Mais aucun rapport avec .Net.

    Citation Envoyé par Bourgui Voir le message
    Pour ce qui est du HTML : pourquoi utiliser un framework si c'est pour tout refaire ?
    Personne ne parle de tout refaire.
    Tu prétends que les possibilités de "customisation" du HTML ne sont pas assez grandes, je te prouve que tu as tort, point barre.

    Rien n'oblige à développer ses propres contôles; avec un minimum de maîtrise xhtml et css, on arrive à faire ce que l'on veut avec les contrôles de base (à partir de la version 2.0, la 1.1 rend du HTML trop peu conforme sans modifications).


    Citation Envoyé par hegros Voir le message
    Pourquoi la 1.1 plutot que la dernière ? Parce qu'à priori c'est la seule version actuelle qui soit stable.
    /me cherche un smiley capable de traduire son état d'esprit face à cette affirmation...

    ah voilà :

    @adiGuba :

    J'ai pas le temps de rentrer dans les détails là tout de suite, mais effectivement, en terme de performances, les différences entre struct et class n'apparaissent pas dans des tests aussi simples et ne se jouent pas au niveau de l'allocation elle-même (merci le GC) mais plutôt au niveau du lieu d'allocation (tas ou pile).

    J'y reviendrai à l'occasion...
    In my experience, any attempt to make any system idiot proof will only challenge God to make a better idiot.

Discussions similaires

  1. vba versus java
    Par lemacdupc33 dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 30/05/2017, 10h52
  2. Temps de compilation C++ versus Java
    Par ZeRevo dans le forum Eclipse C & C++
    Réponses: 0
    Dernier message: 16/12/2011, 13h34
  3. Que choisir : PHP versus Java ?
    Par Sniper37 dans le forum Général Conception Web
    Réponses: 164
    Dernier message: 28/04/2009, 16h50
  4. Vitesse : C Versus Java
    Par ToTo13 dans le forum C
    Réponses: 15
    Dernier message: 01/10/2006, 09h19
  5. WinDev versus Java
    Par Tijee dans le forum WinDev
    Réponses: 4
    Dernier message: 29/01/2006, 10h15

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