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

ASP.NET Discussion :

[C# 2] Faire une pause sans bloquer l'application


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 19
    Par défaut [C# 2] Faire une pause sans bloquer l'application
    Bonjour,

    j'ai réalisé un site web en asp.net (C# 2.0) qui doit effectuer à un moment une pause. Ce site web est dupliqué en très grand nombre sur IIS6. Quand je dis en très grand nombre c'est dans les 900 environ (me demandez pas pourquoi, ca n'a aucun intéret ici ). J'ai mis des pool d'applications (il y a environ 150 sites pour un pool) ce qui fait que j'ai quelques process w3p.exe qui tournent. Jusque la, meme si le déploiement est un peu exotique, tout va bien.

    Pour la pause, j'utilise ce bout de code qui fonctionne mais qui est inélégant au possible (car il utilise du windows form pour pomper les messages) :

    (DELAY est une constante en milliseconds)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int v_maxDelay = 60 * 1000;
    int v_span = 100;
    int v_currentDelay = 0;
     
    while (v_currentDelay < DELAY && v_currentDelay < v_maxDelay) {
    	System.Windows.Forms.Application.DoEvents();
    	Thread.Sleep(v_span);
    	v_currentDelay += v_span;
    }
    Le probleme avec Thread.Sleep c'est qu'il bloque le thread en cours, donc les 150 sites d'un meme pool d'application. Le DoEvents() me permets (mais veurk que c'est laid) d'éviter ce blocage.

    J'ai pensé à utiliser à la place un objet qui timeout (et le faire timeouter expres par exemple) mais je ne trouve pas d'objets qui irait bien.

    Les timers j'ai essayé, ca ne va pas, ce n'est pas bloquant. C'est la qu'est tout le paradoxe, je dois bloquer le site mais pas ses petits camaradess qui sont dans le meme pool.

    Si quelqu'un a une idée, je suis preneur

    edit : non, faire 1 pool par site n'est pas possible, ca me ferait 900 pool donc 900 process w3p ^^

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Le probleme avec Thread.Sleep c'est qu'il bloque le thread en cours, donc les 150 sites d'un meme pool d'application
    Ca, j'ai du mal à y croire

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 19
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    Ca, j'ai du mal à y croire
    Ben non, le Thread.Sleep bloque le process. Vu que le pool est un process, ca bloque tous les sites du pool... :/

    edit : je viens de faire le test avec mon IIS 5 et effectivement ca ne semble pas bloquer les autres sites. Mais il n'y pas de configurations possible de pool dans IIS 5 (il n'y en a qu'un et tout est dedans) contrairement à IIS 6.

  4. #4
    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
    System.Windows.Forms.Application.DoEvents();
    Dans une appli web ?
    DoEvents n'a de sens que pour des applications Windows...

    le Thread.Sleep bloque le process
    Non, seulement le thread... il peut y avoir plusieurs threads dans un process

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 19
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Dans une appli web ?
    DoEvents n'a de sens que pour des applications Windows...


    Non, seulement le thread... il peut y avoir plusieurs threads dans un process
    1) et oui mais ca permet d'amorcer la pompe de messages et d'éviter de bloquer les autres threads

    2) ouais sauf que sur IIS 6 ca marche pas comme ca

  6. #6
    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 Tamahome Voir le message
    1) et oui mais ca permet d'amorcer la pompe de messages et d'éviter de bloquer les autres threads
    Il n'y a pas de pompe de messages pour une appli web...

    Citation Envoyé par Tamahome Voir le message
    2) ouais sauf que sur IIS 6 ca marche pas comme ca
    Ca doit être configurable, non ?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/12/2012, 21h26
  2. faire une recherche sans tenir compte de la casse
    Par richard038 dans le forum SQL
    Réponses: 5
    Dernier message: 11/10/2005, 09h07
  3. Faire une pause
    Par loutente dans le forum Access
    Réponses: 5
    Dernier message: 03/10/2005, 17h23
  4. Faire une pause dans le programme
    Par shinobi dans le forum Access
    Réponses: 6
    Dernier message: 13/06/2005, 16h37
  5. [MFC] Faire une pause dans un thread
    Par Kevgeii dans le forum MFC
    Réponses: 3
    Dernier message: 21/02/2005, 11h49

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