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

Dotnet Discussion :

[Performance] Events, multi abonnement ou mono avec condition ?


Sujet :

Dotnet

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Août 2010
    Messages : 188
    Points : 129
    Points
    129
    Par défaut [Performance] Events, multi abonnement ou mono avec condition ?
    Bonjour.

    Je suis sur le développement d'un petit Framework maison pour d'une part concevoir des outils pratique mais surtout faire un peu de veille techno pour m'améliorer.

    Bien que sur du C#, je pense que la question qui va suivre peux aussi bien concerner VB.net.

    Je possède une class lambda possédant plusieurs DependencyProperty. Chacune d'entre elle est en faite la configuration d'une touche du clavier pour une action bien définie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static readonly DependencyProperty Action1Property = DependencyProperty.Register("Action1",
        typeof(InputGesture),
        typeof(Lambda),
        new PropertyMetadata(null, Action1Callback));
     
    public InputGesture Action1
    {
        get { return (InputGesture)GetValue(Action1Property); }
        set { SetValue(Action1Property, value); }
    }
    J'ai commencé à développer sur la première idée ci-dessous suivant :

    • Un Dictionary<Action, InputGesture> afin de lister mes actions (une action étant unique) et son InputGesture associé.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      private Dictionary<Action, InputGesture> ActionInputGestureHandler;
      L'idée était de m'attaché au KeyPress une seul fois et d’exécuter les actions selon les InputGesture configuré et la touche entrée.
      Bien évidement ma méthode passerais par du Linq afin de trouver dans mon dictionnaire les actions à exécuter.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ActionInputGestureHandler.Any(k => k.Value.Key == key);
    • Une autre solution à laquelle je pensais était de m'abonner autant de fois au KeyPress qu'il y ai d'action configurée.
      Du coup exit l'idée du Dictionary et un seul If pour savoir la touche correspond à la configuration de chacune des actions.
      Cela implique bien plus de code mais peut-être une meilleur gestion du Thread si je ne me trompe pas.


    J'avoue ne pas trop savoir les ressources et performances que cela implique dans les deux cas.

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Août 2010
    Messages : 188
    Points : 129
    Points
    129
    Par défaut
    En bref qu'est ce qui optimum entre ces deux solutions (Grand maximum je peux avoir 6 actions à exécuter) :
    Ou bien avez-vous une meilleur solution à me proposer

    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
    public void Handle()
    {
        control.KeyPress += Action1;
        control.KeyPress += Action2;
        control.KeyPress += Action3;
    }
     
    public void Action1(object sender, EventArgs e)
    {
        if(e.key == myKey)
        {
            // Mon code
        }
    }
     
    public void Action2(object sender, EventArgs e)
    {
        if(e.key == myKey)
        {
            // Mon code
        }
    }
     
    public void Action3(object sender, EventArgs e)
    {
        if(e.key == myKey)
        {
            // Mon code
        }
    }
    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
    private Dictionary<Action, Key> actions;
     
    public void Handle()
    {
        control.KeyPress += ExecuteAction;
    }
     
    public void ExecuteAction(object sender, EventArgs e)
    {
        var actions = this.actions.Where(a => a.Value = e.Key);
        foreach(a in actions.Select(a => a.Key))
        {
            a();
        }
    }

Discussions similaires

  1. SELECT multi-critères avec condition absolue
    Par wedz79 dans le forum Requêtes
    Réponses: 1
    Dernier message: 17/04/2014, 12h52
  2. Sélection multi table avec condition
    Par iuz dans le forum Langage SQL
    Réponses: 8
    Dernier message: 05/05/2004, 15h04
  3. ALTER VIEW avec condition
    Par yan77 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/04/2004, 17h22
  4. Index avec conditions
    Par marhnix dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 29/03/2004, 10h48
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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