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 :

Premier Envoi d'event tres lent


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 19
    Points : 12
    Points
    12
    Par défaut Premier Envoi d'event tres lent
    Bonjour,

    J'ai un petit souci, en fait non j'en ai deux

    Voici le premier:

    Je fais une application Client/Serveur en C# et j'utilise le Remoting
    Je souhaite envoyer des evenement aux clients depuis le serveur

    Pour que le l'envoi des evenement soient independant des reponses des clients, je veux que ce soit asynchrone et j'ai utilise le code suivant, en utilisant un thread different pour chaque envoi :

    Code : 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
    /// <summary>
    /// Classe utilisée pour envoyer les évènements en utilisant des thread distincts
    /// </summary>
    class MyThread 
    {
        public delegate void ErrorHandler(Delegate d);
    			
        public event ErrorHandler	             Error;
        object[]			_args;
        Delegate			_target;
    			
        public MyThread(Delegate d, params object[] args) 
        {
    	this._target = d;
    	this._args = args;			
        }	
        public void Call() 
        {		
               System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(CallDelegate));
        }
       void CallDelegate(Object stateInfo) 
        {
    	try 
    	{
                 	this._target.DynamicInvoke(this._args);
    	} 
    	catch 
    	{
    		if( Error!=null) 
    	            {
    		     Error(this._target);	
    	            }
                }
         }
    }
    
    public void Unregister(Delegate d) 
    {
    	_UpdateDataHandler -= (UpdateDataHandler)d;
    	System.Console.WriteLine("Unregistered");
    }
    
    public void FireUpdateDataEvent()
    {
                if (_UpdateDataHandler != null) 
    	{
    	    UpdateDataHandler copie = _UpdateDataHandler;
    	    foreach(Delegate d in copie.GetInvocationList()) 
    	    {
    		MyThread t=new MyThread(d);
    		t.Error+=new MBServeur.MBFacade.MyThread.ErrorHandler(Unregister);
    		t.Call();
    	    }
    			}
    }

    Cela fonctionne tres bien, sauf la toute premiere fois ou l'evenement est envoye, le "dynamicInvoke" est tres lent (plusieurs secondes...) et je n'arrive pas a trouver pourquoi, puisqu'apres tout fonctionne parfaitement.

    Donc voila, est-ce que quelqu'un peut m'aider? je ne m'en sors pas!
    Je vais faire un autre post pour mon second probleme, ce sera plus clair...

    Merci d'avance!

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Bah j'aurais tendance à dire que c'est très lent la première fois car cela correspond peut être à la première compilation. Les programmes c# ne sont compilés que lors de la première utilisation.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Le probleme c'est que cet evenement correspond a une mise à jour importante, et qu'il faut vraimemt que ca soit instantané, meme la premiere fois
    Il me faudrait une solution de contournement, j'utilisais le threadpool pour ne pas creer de nouveau thread a chaque fois mais peut etre que ca marcherais mieux?

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Je peux utiliser une solution de contournement qui consiste a envoyer des le depart cet evenenent et attendre de l'avoir recu pour vraiment lancer mon IHM mais du tout ca retarde bien 10s le demarrage ca choque un peu!
    surtout que je crains que ca ne cache un pb latent qui me retombera desuss plus tard! qu'en pensez vous ?

    merci
    blobette

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 101
    Points : 82
    Points
    82
    Par défaut
    J'en pense que ... nous avons le même problème et que c'est même pour cette raison que je suis là !

    Pour notre problème, j'imagine que c'est plutôt dû au fait qu'aprés le premier appel, certaines informations doivent être accessibles en cache...
    Mais nous ne trouvons pas grand chose pour le moment sur cette piste...

    N'y a t il point des amateur de remoting à même de nous porter assistance ?

    Quoi qu'il en soit, Blobette, je te propose que le premier de nous deux (qui rira...) qui trouve une vrai solution reviennent ici même.

    Bonne chance !

Discussions similaires

  1. [FB 1.5.2] Requetes tres lentes via VPN
    Par gudul dans le forum Connexion aux bases de données
    Réponses: 8
    Dernier message: 05/01/2006, 18h52
  2. NFS : Mount très lent
    Par litbos dans le forum Réseau
    Réponses: 2
    Dernier message: 28/12/2005, 14h23
  3. Impression très très lente avec Samba
    Par Daav dans le forum Réseau
    Réponses: 4
    Dernier message: 29/12/2004, 18h45
  4. Envoi de mail trop lent
    Par MASSAKA dans le forum ASP
    Réponses: 3
    Dernier message: 15/10/2004, 10h57
  5. Réponses: 6
    Dernier message: 29/09/2004, 12h45

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