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

C# Discussion :

Java vs C# : conseils


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut Java vs C# : conseils
    Bonjour à tous,
    Je ne connais pas C# mais je pense y venir via mono (la portabilité reste très importante pour moi).
    J'ai qq reproches à faire à la jvm Sun et j'aimerai savoir si il est possible de les contourner en C# :

    1-Y a t il une limite mémoire en C# (cf xmx java) ?

    2-Est il possible de donner un nom à l'exe de notre machine virtuelle (en java c java.exe, donc avec top ou TaskManager on ne sait jamais quel process tuer qd il y a 10 jvm qui tournent) ?

    3-Est il possible de tuer un thread (genre thread.stop(), en java la méthode existe mais n'assure pas la libération des ressources utilisées par le thread)?

    4-Les fonctions trigo (sin,cos,exp ...) sont elles aussi gourmande qu'en java (en java on se prend un facteur 10 par rapport à du natif sur ces fonctions) ?

    5-Quel est le sérieux de mono (ie la techno sera t elle là dans 10 ans) ?

    6-Est il possible de lier un code C# avec un code natif (cf JNI en java) ?

    Merci

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    1
    il y a des limitations, vu que tu parles de mono, ca implique pas de wpf, donc on va parler de windows forms
    déjà il y a une limite d'objets gdi et d'objets user (ca dépend de l'os, 10000 pour chaque sur vista je crois)
    si ton appli n'est pas poussée graphiquement tu en seras très loin !
    après au niveau de la ram prise par l'appli, je ne pense pas qu'il y a de limite
    je viens de faire un test, un bouton qui créé un bitmap géant en ram, sans garder de référence, le GC se déclenche à 1,2Go alloué par le processus
    en gardant une référence, j'en suis à 3Go de ram et toujours pas crash, c'est passé sur le swap sur le disque, donc ca ralenti un peu tout sur windows si je continue de cliquer come un fou...
    enfin je ne vois pas pourquoi il y aurait une limite sur la ram ... m'enfin le outofmemroyexception existe, donc c'est que ca doit arriver

    2
    en .net c'est la clr qui gère le programme, elle n'est pas visible je crois, dans les processus tu vois le nom de l'exe qui tourne, chaque processus .net affichant le nom de l'exe ...

    3
    pour les thread, soit on peut les susprendre, soit les annulée (ca délenche une exception qui se propage jusqu'à l'arret) soit les interrompre (ca arrete là ou ca en était sans se poser de questions)
    en cas d'interruption, c'est le garbage collector qui s'occupe de tout en théorie, m'enfin il serait en effet judicieux de voir si les using dispose bien les objets quand meme
    enfin pour des choses non managées aucun soucis je pense

    4
    aucune idée
    si ca peut t'aider, je viens de faire un petit chrono
    500 000 tours de boucle
    un double dans lequel je mets Math.Sin(Rnd() * 100) (! syntaxe vb.net)
    40 millisecondes sur un quad core intel 2.8GHz

    5
    je ne connais pas trop mono, j'ai vaguement suivi l'évolution par des rumeurs car je trouve que c'est une bonne idée
    à priori depuis peu ca supporte plutot bien le framework 2
    par contre peut etre pas toutes les classes graphiques, étant donnée qu'en windows forms, elles ne font qu'appeler la dll gdi+ de windows ... je ne sais comment ils ont géré ca sous linux ...
    sur le site de mono tout est expliqué sur ce qui est géré, le sera, ou ne le sera jamais (wpf par exemple qui se base sur directX)

    6
    pas compris
    il est possible de compiler un exe .net en code natif une fois qu'il a été installé sur une machine, ca permet de ne pas perdre de temps à le recompiler à chaque fois tout en gardant les optimisations liée à la machine (via ngen.exe)


    enfin faudrait voir ton type de projet, car je suis pas sur que .net soit l'idéal pour développer pour linux
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut
    2
    en .net c'est la clr qui gère le programme, elle n'est pas visible je crois, dans les processus tu vois le nom de l'exe qui tourne, chaque processus .net affichant le nom de l'exe ...
    Si je veux appeler mon appli bozzo.exe, je peux la voir dans les process et tuer bozzo.exe ?

    6
    pas compris ...
    Est il possible de lier un code C++ ou C avec du C# ?
    7- J'étais parti sur le principe que le C# se compile en bytecode comme en java...vrai ou faux ?

    1-(mémoire) je pensais à des machines qui ont 16 ou 32 Go de ram. En java on ne peut pas allouer autant.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    si ton exe s'appelle bozzo.exe il apparaitra dans le gestionnaire des taches de windows comme bozzo.exe oui oui (je ne sais pas ce qui se passe sous linux avec mono)


    le .net est compilé depuis vistal studio en .Exe qui contient du MSIL
    c'est un langage intermédiaire
    le programme est ensuite compilé par le JIT au moment de l'exécution, à chaque execution, et au fur et à mesure qu'on appelle des membres
    je ne connais pas trop java, mais ca doit etre similaire
    un exe .net est donc très facilement décompilable, le MSIL peut etre en transformé en n'importe quel langage .net


    pour la ram à allouer je pense pas qu'il y ait de limite, à part celle de l'os, et en 64bits, ca laisse pas mal de possibilités
    (je viens de refaire le test sur un de nos serveurs qui avait 5Go de ram non allouée actuellement, j'ai pu les remplire ...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut
    enfin faudrait voir ton type de projet, car je suis pas sur que .net soit l'idéal pour développer pour linux
    L'idée c'est d'avoir du code réutilisable, portable et rapide.
    Java me satisfais sauf sur les points que j'ai mentionné.

  6. #6
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut
    J'ai oublié un point important (c un peu sioux) :

    8-A propos de l'héritage multiple. En java on affirme à tort avoir résolu le pb de collision de méthodes dans l'héritage multiple en utilisant les interfaces. Mais même si il n'y a pas de collision d'implémentation on a qd même une collision de spécification.
    Exemple :
    Interface 1 et 2 ont une méthode boolean isToday().
    La spec de l'interface 1 dit : renvoie true si aujourd'hui est votre anniversaire.
    La spec de l'interface 2 dit : renvoie true si aujourd'hui c'est dimanche.

    Quoi qu'il arrive en héritant des deux interfaces, on a une collision.
    Or en C# il y a des namespaces, alors est il possible de distinguer les deux méthodes en utilisant des namespaces ?

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    l'héritage multiple n'existe pas en .net

    je viens de tester le cas que tu décris avec des interfaces
    la classe qui implémente les 2 interfaces aura bien les 2 méthodes, mais celles ci ne peut pas avoir le meme nom
    ca écrit donc isToday implements I1
    et IsToday2 implements I2
    (syntaxe vb.net)
    les namespaces ne sont pas obligatoire même
    quand on a une instance de la classe, on voit donc les 2 méthodes (IsToday et IsToday2)
    par contre si on cast l'instance sur une des deux interfaces, on ne voit que le nom générique donné dans l'interface (donc IsToday dans les 2 cas) et la méthode appelée est la bonne (vu que l'implements indique quelle méthode correspond à la méthode de l'interface)
    donc à priori ca ne poserait pas de soucis
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par r1-1024 Voir le message
    Interface 1 et 2 ont une méthode boolean isToday().
    La spec de l'interface 1 dit : renvoie true si aujourd'hui est votre anniversaire.
    La spec de l'interface 2 dit : renvoie true si aujourd'hui c'est dimanche.
    Il existe en .Net le concept d'implémentation explicite d'interface.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    interface IMachin { bool IsToday(); }
    interface ITruc { bool IsToday(); }
     
    class C : IMachin, ITruc
    {
      bool IMachin.IsToday() { return true; }
      bool ITruc.IsToday() { return false; }
    }
    Et l'une ou l'autre méthode sera exécutée selon que tu castes ton instance de C en ITruc ou IMachin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    C c = new C();
    c.IsToday(); // compile pas
    ((ITruc)c).IsToday(); // renvoie false
    ((IMachin)c).IsToday(); // renvoie true

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Projet Java - besoin de conseils
    Par Machiavel dans le forum Java EE
    Réponses: 9
    Dernier message: 26/12/2006, 13h53
  2. IDE Java à conseiller à un débutant
    Par Doctor Z dans le forum EDI et Outils pour Java
    Réponses: 13
    Dernier message: 30/09/2005, 22h37
  3. [conseils]Java ou web
    Par le Daoud dans le forum Etudes
    Réponses: 5
    Dernier message: 09/05/2005, 23h01

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