OVH Cloud OVH Cloud

CPU et programme C#

5 réponses
Avatar
Nicolas
Bonjour,

Est il possible de définir un seuil max d'utilisation de la CPU pour un
programme C# ?
Mon problème, c'est que mon programme prend 99% de CPU et c'est la
galere. puis-je l'obliger à n'utiliser que 50% de CPU au maximum ?

Merci,
Nicolas

5 réponses

Avatar
Simon Mourier [MS]
C'est assez difficile en fait. Ce qui relativement facile c'est de connaître
la charge à l'instant T. La limiter c'est une autre paire de manches.

Il existe un programme add-on à Windows "WSRM" Windows System Resource
Manager qui est capable de réaliser ce genre de choses sur Windows Server
2003, Enterprise Edition et Datacenter Edition disponible ici
http://www.microsoft.com/windowsserver2003/downloads/wsrm.mspx

Par programmation, à partir de Windows 2000, il existe un API de "jobs"
(WSRM se base dessus), qui permet de poser des limites à un process, mais ce
n'est pas forcément facile à utiliser.
Voir ici par exemple.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/setinformationjobobject.asp

En C#, il faudrait l'utiliser en intérop (DllImport, etc...) pour utiliser
cette API.

Enfin, de manière plus simple, il est aussi possible de changer la priorité
du processus avec l'API SetPriorityClass. En utilisant IDLE_PRIORITY_CLASS
ou BELOW_NORMAL_PRIORITY_CLASS. Ca ne résoud pas entièrement le problème,
mais ca peut dépanner. Si le processus est tout seul, il prendra quand même
100% mais si un autre a une priorité supérieure (donc normale par exemple),
il passera en second plan.

Simon


"Nicolas" a écrit dans le message de news:

Bonjour,

Est il possible de définir un seuil max d'utilisation de la CPU pour un
programme C# ?
Mon problème, c'est que mon programme prend 99% de CPU et c'est la galere.
puis-je l'obliger à n'utiliser que 50% de CPU au maximum ?

Merci,
Nicolas


Avatar
Pompier Christian
pourquoi ne regarde tu pas l'endroit ou le code tourne en boucle et pousse
le processa 100% et n'essaies tu pas de l'arranger?

"Simon Mourier [MS]" a écrit dans le message
de news:
C'est assez difficile en fait. Ce qui relativement facile c'est de


connaître
la charge à l'instant T. La limiter c'est une autre paire de manches.

Il existe un programme add-on à Windows "WSRM" Windows System Resource
Manager qui est capable de réaliser ce genre de choses sur Windows Server
2003, Enterprise Edition et Datacenter Edition disponible ici
http://www.microsoft.com/windowsserver2003/downloads/wsrm.mspx

Par programmation, à partir de Windows 2000, il existe un API de "jobs"
(WSRM se base dessus), qui permet de poser des limites à un process, mais


ce
n'est pas forcément facile à utiliser.
Voir ici par exemple.



http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/setinformationjobobject.asp

En C#, il faudrait l'utiliser en intérop (DllImport, etc...) pour utiliser
cette API.

Enfin, de manière plus simple, il est aussi possible de changer la


priorité
du processus avec l'API SetPriorityClass. En utilisant IDLE_PRIORITY_CLASS
ou BELOW_NORMAL_PRIORITY_CLASS. Ca ne résoud pas entièrement le problème,
mais ca peut dépanner. Si le processus est tout seul, il prendra quand


même
100% mais si un autre a une priorité supérieure (donc normale par


exemple),
il passera en second plan.

Simon


"Nicolas" a écrit dans le message de news:

> Bonjour,
>
> Est il possible de définir un seuil max d'utilisation de la CPU pour un
> programme C# ?
> Mon problème, c'est que mon programme prend 99% de CPU et c'est la


galere.
> puis-je l'obliger à n'utiliser que 50% de CPU au maximum ?
>
> Merci,
> Nicolas




Avatar
Patrick Philippot
Nicolas wrote:
Est il possible de définir un seuil max d'utilisation de la CPU pour
un programme C# ?
Mon problème, c'est que mon programme prend 99% de CPU et c'est la
galere. puis-je l'obliger à n'utiliser que 50% de CPU au maximum ?



Bonjour,

N'essayez pas de corriger le symptôme, corrigez la cause. Revoyez le
design de l'application.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Nicolas
Pompier Christian a écrit :
pourquoi ne regarde tu pas l'endroit ou le code tourne en boucle et pousse
le processa 100% et n'essaies tu pas de l'arranger?




je suis pas encore assez calé en Csharp pour y arriver ... j'ai fait le
ménage mais pas assez ...
Il y a un thread qui tourne en boucle pour supprimer des pop-up's Web et
un autre qui joue l'automate sur des pages Web ... Tous cela dans le
meme programme.


"Simon Mourier [MS]" a écrit dans le message
de news:

C'est assez difficile en fait. Ce qui relativement facile c'est de



connaître

la charge à l'instant T. La limiter c'est une autre paire de manches.

Il existe un programme add-on à Windows "WSRM" Windows System Resource
Manager qui est capable de réaliser ce genre de choses sur Windows Server
2003, Enterprise Edition et Datacenter Edition disponible ici
http://www.microsoft.com/windowsserver2003/downloads/wsrm.mspx

Par programmation, à partir de Windows 2000, il existe un API de "jobs"
(WSRM se base dessus), qui permet de poser des limites à un process, mais



ce

n'est pas forcément facile à utiliser.
Voir ici par exemple.




http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/setinformationjobobject.asp

En C#, il faudrait l'utiliser en intérop (DllImport, etc...) pour utiliser
cette API.

Enfin, de manière plus simple, il est aussi possible de changer la



priorité

du processus avec l'API SetPriorityClass. En utilisant IDLE_PRIORITY_CLASS
ou BELOW_NORMAL_PRIORITY_CLASS. Ca ne résoud pas entièrement le problème,
mais ca peut dépanner. Si le processus est tout seul, il prendra quand



même

100% mais si un autre a une priorité supérieure (donc normale par



exemple),

il passera en second plan.

Simon


"Nicolas" a écrit dans le message de news:


Bonjour,

Est il possible de définir un seuil max d'utilisation de la CPU pour un
programme C# ?
Mon problème, c'est que mon programme prend 99% de CPU et c'est la





galere.

puis-je l'obliger à n'utiliser que 50% de CPU au maximum ?

Merci,
Nicolas










Avatar
Nicolas
Patrick Philippot a écrit :
Nicolas wrote:

Est il possible de définir un seuil max d'utilisation de la CPU pour
un programme C# ?
Mon problème, c'est que mon programme prend 99% de CPU et c'est la
galere. puis-je l'obliger à n'utiliser que 50% de CPU au maximum ?




Bonjour,

N'essayez pas de corriger le symptôme, corrigez la cause. Revoyez le
design de l'application.





Ok je crois que je vais devoir m'atteler à la tache ;o))