Question
Performances de PowerShell ?
- Bertrand LAIGLE
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 7
- Remerciements reçus 0
Certes. Mais le CMD atteint tout de même des sommets en termes de lenteur, toutes proportions gardées.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é.
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).[...]ce ne sont pas des langages de programmation à proprement parler.
[...]
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.
- Arnaud Petitjean
- Hors Ligne
- Modérateur
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.
- Bertrand LAIGLE
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 7
- Remerciements reçus 0
arnaud écrit:
C'est probablement vrai dans l'ensemble.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.
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...
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 '#'.[...]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
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 :
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).[code:1]D:\TEMP>RemplEtoiles.cmd
13:59:00,24
azerty#uiop#qsdfg#hjklm#wxc#vbn
14:00:26,08
D:\TEMP>[/code:1]
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.
- Arnaud Petitjean
- Hors Ligne
- Modérateur
[code:1]
$chaine =\"azerty*uiop*qsdfg*hjklm*wxc*vbn\"
$chaine.replace(\"*\",\"#\"«»)
[/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 =\"azerty*uiop*qsdfg*hjklm*wxc*vbn\"
$chaine.replace(\"*\",\"#\"«»)
}
[/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.
- Bertrand LAIGLE
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 7
- Remerciements reçus 0
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 \"replace\" ? Car j'ai omis de préciser que c'est comme ça que je l'entendais, l'idée étant de tenter une comparaison sur un \"algorithme\" donné...
Bertrand.<br><br>Message édité par: blaigle, à: 6/02/07 18:23
Connexion ou Créer un compte pour participer à la conversation.
- Marco Shaw
- Hors Ligne
- Nouveau membre
- Messages : 19
- Remerciements reçus 0
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.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Discussions générales
- Performances de PowerShell ?