Envoi d'event tres lent

blobette Messages postés 11 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 6 mai 2008 - 28 août 2007 à 11:13
blobette Messages postés 11 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 6 mai 2008 - 28 août 2007 à 11:42
Bonjour,

J'ai un petit souci : 

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 :

/// <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! <!-- / message --><!-- edit note -->

2 réponses

tomlev Messages postés 25 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 28 août 2007
28 août 2007 à 11:25
C'est peut-être lié à l'établissement de la connexion ?
Tu pourrais essayer d'envoyer un évènement bidon au démarrage, histoire que les évènements suivants soient plus rapides.
0
blobette Messages postés 11 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 6 mai 2008
28 août 2007 à 11:42
C'est qu'en faisant ca ca marche, c'est une bonne idee!
Mais le probleme, c'est que comme c'est un evenement d emise a jour d'ihm important, je ne peux pas rendre disponible l'ihm avant d'etre sure que cet evenement  fonctionne, du coup en faisant ca, je retarde l'affichage de l'ihm de plusieurs secondes! ca fait long!
donc effectivement c'est une bonne solution de contournement, mais j'ai peur que ca cache un probleme latent quelque part...

merci pour ta reponse en tout cas !
0
Rejoignez-nous