Question Performances de PowerShell ?

Plus d'informations
il y a 17 ans 9 mois #53 par Bertrand LAIGLE
Arnaud écrit:

Il faut que tu saches que la vitesse d'exécution n'est pas la vocation première de tout langage de script ou de commandes interprété.

Certes. Mais le CMD atteint tout de même des sommets en termes de lenteur, toutes proportions gardées.

[...]ce ne sont pas des langages de programmation à proprement parler.
[...]

Euh... Je ne suis pas tout à fait d'accord, mais c'est un autre débat. A la base il s'agissait uniquement, en effet, de lancer des commandes telles qu'on aurait pu le taper au clavier, mais avec le temps cela s'est tellement enrichi que l'on peut vraiment programmer \"n'importe quoi\" avec (là aussi, toutes proportions gardées).
Toujours est-il que je ne serai pas éternel surtout en tant que prestataire, donc le jour où ma mission sera terminée je ne sais pas si quelqu'un sera capable de / volontaire pour faire évoluer mes scripts CMD, fussent-ils largement commentés (au passage, j'ai testé en supprimant les remarques : on ne gagne rien de perceptible en performaces, ce n'est donc pas de là que ça vient. Du coup, je me dit que peut-être le passage à un langage plus évolué / plus actuel serait une bonne idée.
A suivre.
Bonne fin de journée !
Bertrand.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 9 mois #54 par Arnaud Petitjean
De mon point de vue le choix du langage dépendra de l'orientation que tu veux donner à ta carrière professionnelle. Si tu choisis Powershell, tu prépares le tournant que va subir le métier d'admin système Windows, et si tu choisis un autre langage genre C,VB.net ou C#, tu t'orientes davantage vers les métiers de développeurs.

A toi de voir...

Ceci étant pour revenir au coeur du sujet, je suis intéressé de répondre à ta question. Donc un petit bout de code batch serait le bienvenu.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 9 mois #56 par Bertrand LAIGLE
Bonjour !
arnaud écrit:

De mon point de vue le choix du langage dépendra de l'orientation que tu veux donner à ta carrière professionnelle. Si tu choisis Powershell, tu prépares le tournant que va subir le métier d'admin système Windows, et si tu choisis un autre langage genre C,VB.net ou C#, tu t'orientes davantage vers les métiers de développeurs.

C'est probablement vrai dans l'ensemble.
En ce qui me concerne, et malgré mes souhaits de début de carrière, mes activités de développement ne représentent que quelques petites lignes noyées dans mon CV au milieu de compétences réseau, système, sécurité. Donc ça ne devrait pas tellement jouer, et ça me va en fait assez bien comme ça, le réseau étant ce qui m'intéresse le plus mais à condition que ça ne soit pas trop exclusif. Bref...

[...]Ceci étant pour revenir au coeur du sujet, je suis intéressé de répondre à ta question. Donc un petit bout de code batch serait le bienvenu.

Arnaud

Eh bien, voilà : j'ai repris une \"colle\" que j'avais posé aux spécialistes des scripts CMD voilà quelques temps, à savoir : comment remplacer un caractère '*' dans une chaîne par autre chose, ici un '#'.
Ca a l'air idiot, mais c'est parfois nécessaire et il se trouve qu'en CMD c'est aussi difficile à faire pour un caractère spécial comme '*' que c'est facile à faire pour un autre caractère tel que 'A' où il aurait suffit d'écrire : set var=%var:A=#%
Voici donc le programme qui fait ça, je le fais exécuter 1000 fois pour que ça dure un peu :

[code:1]@echo off
setlocal enableextensions

set chaine=azerty*uiop*qsdfg*hjklm*wxc*vbn
echo %time%
rem On fait une boucle sur la même action, pour que ça prenne du temps...
for /l %%i in (1,1,1000) do call :_SsPrg_RemplEtoiles %chaine%
echo %res%
echo %time%
rem Après affichage de l'heure avant/après et du résultat, on termine le programme.
goto :EOF

:_SsPrg_RemplEtoiles
REM Remplace toute occurrence du caractère '*' par un '#'
REM
REM Arguments : chaîne
REM
REM Renvoie (affiche) le résultat.
REM
set var=%*
set res=
rem On extrait dans c le 1er caractère de la chaîne
set c=%var:~,1%

:Boucle_RemplEtoiles
rem Si c'est une * on le remplace par #, sinon on le laisse tel qu'il est
if \"%c%\"==\"*\" set c=#
rem On ajoute le caractère traité au résultat final...
set res=%res%%c%
rem ... et on ampute la chaîne de ce caractère
set var=%var:~1%
rem Si la chaîne n'est pas vide, on continue...
if \"%var%\"==\"\" (set c=) else (set c=%var:~,1%)
if not \"%c%\"==\"\" goto Boucle_RemplEtoiles
rem Sinon, on termine le sous-programme, donc on revient au \"call\".

[/code:1]
A l'exécution, cela me donne :

[code:1]D:\TEMP>RemplEtoiles.cmd
13:59:00,24
azerty#uiop#qsdfg#hjklm#wxc#vbn
14:00:26,08

D:\TEMP>[/code:1]

soit un temps d'exécution de 1 min 26 s sur un modeste Pentium-M à 1,2 GHz (c'est tout ce que j'ai sous la main pour l'instant).
Mon application (qui tourne normalement sur des bi-xeon 3 GHz qui, je te rassure, font autre chose également ;)) est notamment constituées de choses de ce genre, donc on va imaginer que c'est représentatif des performances.

Voilà, à toi de jouer si tu veux bien... Si tu peux exécuter ce petit programme en l'état, puis le convertir en PowerShell et voir combien de temps il met à s'exécuter, ça me donnera une idée des performances !
Bien cordialement,
Bertrand. :)<br><br>Message édité par: blaigle, à: 5/02/07 14:46

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 9 mois #57 par Arnaud Petitjean
Voilà toute la difficulté en PowerShell pour remplacer des caractères à l'intérieur d'une chaine :

[code:1]
$chaine =\&quot;azerty*uiop*qsdfg*hjklm*wxc*vbn\&quot;
$chaine.replace(\&quot;*\&quot;,\&quot;#\&quot;«»)

[/code:1]

Résultat :
[code:1]
azerty#uiop#qsdfg#hjklm#wxc#vbn

[/code:1]

Maintenant, plus difficile : la boucle sur 1000 itérations.

[code:1]
for ($i=1; $i -le 1000; $i++) {
$chaine =\&quot;azerty*uiop*qsdfg*hjklm*wxc*vbn\&quot;
$chaine.replace(\&quot;*\&quot;,\&quot;#\&quot;«»)
}
[/code:1]

Temps d'exécution mesuré: 3s (sur Athlon 2500+)

No comments.

Arnaud Petitjean

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 9 mois #62 par Bertrand LAIGLE
OK, merci Arnaud ! Ca confirme que le PowerShell est tt de même pas mal pensé comme un langage de programmation, puisqu'il inclut des fonctions qu'on y trouve classiquement.
Et en effet, le résultat se passe de commentaire...

Maintenant, que se passerait-il si tu essayais de traduire le programme sans utiliser la méthode \&quot;replace\&quot; ? Car j'ai omis de préciser :unsure: que c'est comme ça que je l'entendais, l'idée étant de tenter une comparaison sur un \&quot;algorithme\&quot; donné... :P

Bertrand.<br><br>Message édité par: blaigle, à: 6/02/07 18:23

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 9 mois #63 par Marco Shaw
Réponse de Marco Shaw sur le sujet Re:Performances de PowerShell ?
Il y a au moins un des membres de l'equipe de PowerShell qui a deja indique, en publique, que version 1.0 n'avait pas comme but principale d'etre 'efficace'.

Cela serait pour 1.1 ou encore 2.0. Aucune date pour supporter cela cependant.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.116 secondes
Propulsé par Kunena