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

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 25
    Points
    25
    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 : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    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.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 25
    Points
    25
    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
    Points : 6 334
    Points
    6 334
    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
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 25
    Points
    25
    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
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 25
    Points
    25
    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

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    Il est particulierement risqué de passer ton application en TimeCritical...
    Car tu diminue le temps alloué aux autres processus.

    Et quand aux fait qu'il y ai deux cores, ne croient pas que ca va règler le probleme car windows a une facon bien a lui d'aligner les process sur les core, et les passe de l'un al'autre à chaque déclenchement de l'ordonanceur, et ce de façon assez eratique, pour preuve regarde la consommation CPU global etregardecomment la conso est appliquée aux core et tuverras qu'il se démerde tellement bien qu'au final la machine rame alors qu'elle ne devrait pas.

    suffit de regarder quand ta un av qui tourne quasitout seul sur ta machine...
    au lieu de laisser l'av sur un core et bien non
    il le zap dun core à l'autre sans arret...

    Remarque : Une appli passée en TimeCritical devient prioritaire sur le noyau de windows... l'ordonnanceur la case pratiquement tout le temps, et meme les process et thread windows sont relegué au placard. Et plus t'a de core, pire c'est
    C'est une faille très génante surtout si l'appli bouffe un max de cpu, et si en prime tu l'a multithreadé...

+ 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