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 :

Méthode Statique instanciant objet non statique


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 98
    Par défaut Méthode Statique instanciant objet non statique
    Bonjour,

    je souhaiterais lever un doute sur le comportement des méthodes statiques en .Net.
    J'ai une classe statique Outil. Cette classe a des méthodes statiques qui ne font que de la manipulation de données. Pas de problème.

    Là, je viens d'ajouter une autre méthode statique. Mais à la différence des autres, elle instancie d'autres objets pour fonctionner. Est-ce que je m'expose à un problème d'accès concurrent ? (je ne sais pas si l'on dit comme ça mais je pense que vous voyez de quoi je parle )

    Le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static string Print(MyXml dataImpr, string sDataModelFile, string sTemplateFile)
            {
                MyXml Impr = new MyXml("root");
                Impr.Append(dataImpr);
     
                Document myDoc = new Document(Impr,sDataModelFile,sTemplateFile);
                myDoc.Save();
     
                return myDoc.GuDocId;
            }
    merci
    Cordialement

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Oui tu peux avoir des problèmes d'accès concurrent. Dans le code que tu manipules ca devrait aller mais d'une manière générale c'est possible.
    Cependant, avoir des méthodes statiques pour accéder à la base de données c'est pas génial. Il vaut mieux préférer un singleton sur lequel il est possible de contrôler la durée de vie.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Dans le code que tu montres je ne vois aucun problème potentiel : vu que les instances que tu crées sont locales à la méthode, elles ne seront pas manipulées par la même méthode dans un autre thread (vu que chaque thread a sa propre pile)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 98
    Par défaut
    Merci à tous les deux.

    En fait, tomlev me rassure mais je précise tout de même que je suis mono-threadé car appli web (le multi est interdit dans ma boite). Je ne pense pas que cela joue donc.

    @Nathanael : j'entends bien le prob d'accès à la BDD. Mais ce n'est pas le cas là. Je construis un XML à la main.

    Encore merci
    bonne soirée

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    T'es sur de ton coup la?
    Un serveur web mono-threadé, tu vas pas aller loin là

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 38
    Par défaut
    Je pense aussi qu'en appli web, c'est multi thread ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Public class MyClass : System.Web.UI.Page
    {
        static int _counter = 0;
        public static int Inc()
        {
             return _counter++;
        }
     
        public override void PageLoad()
        {
             label.Text = Inc();
        }
    }
    Si quelqu'un a un environnement sous la main pour tester ça

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par nevaram Voir le message
    Si quelqu'un a un environnement sous la main pour tester ça
    Il n'y a rien à tester, c'est sûr à 100% que c'est multi-thread (du moins en ASP.NET). Mais de toutes façons ton test ne voudrait pas dire grand chose : comment tu saurais si 2 requêtes ont été exécutées en même temps ou successivement ?

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par kileak Voir le message
    En fait, tomlev me rassure mais je précise tout de même que je suis mono-threadé car appli web (le multi est interdit dans ma boite). Je ne pense pas que cela joue donc.
    Euh... au contraire, une appli web est intrinsèquement multi-thread ! à moins que tu ne puisses traiter qu'une seule requête à la fois, mais alors la montée en charge risque de poser de sérieux problèmes

    Si tu étais effectivement mono-threadé, la question de l'accès concurrent ne se poserait même pas...

Discussions similaires

  1. Méthode non-statique dans un contexte statique : erreur de compilation
    Par endreillie dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 15/01/2011, 14h36
  2. Réponses: 20
    Dernier message: 14/06/2010, 17h21
  3. [PHP 5.3] appel non-statique à des méthodes statiques
    Par Jcpan dans le forum Langage
    Réponses: 4
    Dernier message: 27/05/2010, 17h06
  4. Java API méthode non statique
    Par os128 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 01/05/2009, 18h06
  5. Réponses: 4
    Dernier message: 15/06/2008, 18h31

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