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 :

Modifier la priorité d'un processus en C# // Accélérer le temps de traitement


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut Modifier la priorité d'un processus en C# // Accélérer le temps de traitement
    Bonjour,

    Afin d'optimisser au mieux, je souhaiterais accélérer le temps de traitement.
    Quel sont les possibilité hors optimissation code ?

    J'ai pensé modifier la priorité de mon application :
    Je essayé manuellement avec Ctrl+Alt+Sup j'obtient un leger gain d'environ 50 Ms, ce gain m'est utile.
    Comment le réaliser automatiquement en C# afin que mon application se lance avec la priorité temps réel ou haute, et si c'est possible descendre toutes les autres a basse ! ?
    Et utiliser le processus que sur le CP1 pour laisser le CPU0 a windows ?

    Autre donnée : Le systeme d'utilisation est XP avec 2G de Ram // dual corp
    Intel(R) Pentium(R) D CPU 3.Ghz.
    Le logiciel en question fait du traitement d'image (il utilise une bibliothéque optimisser).

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour,
    Citation Envoyé par gign2585
    Comment le réaliser automatiquement en C# afin que mon application se lance avec la priorité temps réel ou haute,
    Sur le thread courant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    System.Threading.Thread myThread = System.Threading.Thread.CurrentThread;
     
    myThread.Priority = System.Threading.Priority.AboveNormal;
    Ou via la PriorityClass de ton process.

    En général le gain n'est pas fabuleux.

    Je te déconseille de baisser la priorité des autres process extérieurs à ton application.

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    J'ai testé ta solution qui semble bonne mais je ne sais pas ou placer le code :

    J'ai essayé ceci mais sa ne fonctionne pas !

    lorsque que je regarde avec la fenetre Ctrl+Alt+Sup : la priorité est toujours normal.
    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
     
    namespace test1
    {
        static class Program
        {
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Thread myThread = Thread.CurrentThread;
                myThread.Priority = ThreadPriority.Highest;
     
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }
    }

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Si tu veux que ton application s'exécute plus rapidement, tu devrais plutot optimiser son code. Modifier la priorité est une rustine, ce n'est pas ça qui va faire que ton application fonctionnera mieux.
    Utilise un profiler pour repérer les parties de ton code les plus lentes, et ensuite réécris ces parties pour accélerer les traitements.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    Globalement l'idée est correct.
    Mais j'ai déja optimissé le code avec ANTS profiler.

    Aprés le context dans le lequel le programme va s'éxécuter est bien spécifique :
    C'est un logiciel de contrôle vision
    Plus on demande des traitements d'images plus l'application sera longue.

    Si vraiment l'application doit être rapide c'est pas le programme que l'on accélérer mais l'acquisition, les traitements d'image demandé, ...

    Mais si je peux gagner 60 ms sa permet de faire 1-2 traitements d'image en plus (seuillage,... ). Ce qui n'est pas rien !

    Surtout avec un simple option de windows ! Non

  6. #6
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    J'ai trouver avec le PriorityClass de du process

    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
     
     
    namespace test1
    {
        static class Program
        {
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Thread myThread = Thread.CurrentThread;
                myThread.Priority = ThreadPriority.Highest;
     
                Process pcur = Process.GetCurrentProcess();
                pcur.PriorityClass = ProcessPriorityClass.RealTime;
     
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }
    }
    Merci

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

Discussions similaires

  1. [Etat-Transition] Comment modifier les priorité sur les transitions?
    Par furinkazan dans le forum Autres Diagrammes
    Réponses: 1
    Dernier message: 25/05/2007, 14h44
  2. Modification de la priorité d'un processus
    Par Slivo dans le forum Windows
    Réponses: 4
    Dernier message: 24/04/2007, 20h25
  3. Réponses: 6
    Dernier message: 29/08/2006, 09h18
  4. [Process] Changer la priorité d'un processus
    Par WriteLN dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 17/02/2005, 12h12
  5. [VB6] Forçage de la priorité d'un processus Windows
    Par okyle dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/06/2004, 11h27

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