Question Tableau interne au script qui explose
- Gaga
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 39
- Remerciements reçus 0
Dans mes scripts j'utilise de(s) tableau(x) (de string, de PSObject, ....) qui explose en taille au fur et à mesure du déroulement de mon traitement (par exemple ; scrutation de x machines, création de x enregistrement,calcul mis dans le tableau pour une restituion à la fin du script,....). A partir d'un certain seuil, le script ralenti considérablement et mets plusieurs heures avant de se terminer (alors qu'il devrait mettre 30 mn/1h si le remplissage du tableau était constant). En générale j'utilise des tableau standard, $tab=@()
Existe-t-il des \"tableaux\" dont le remplissage se fait de manière constante qqsoit la grosseur du tableau ? ou une autre méthode de remplissage de tableau ?
Merci.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Sous dotnet l'ajout d'un élément à un tableau recrée un nouvel objet, ce qui peut surcharger le garbage collector. Il est préférable d'utiliser des collections en lieu et place de tableaux. Certaines permettent de préallouer un nombre d'éléments. Mais sans connaître le code posant pb,difficile de préconiser une solution plutot qu'une autre.Existe-t-il des \"tableaux\" dont le remplissage se fait de manière constante qq soit la grosseur du tableau ? ou une autre méthode de remplissage de tableau ?
Au cas où, un outil de visualisation de l'utilisation de la mémoire:
technet.microsoft.com/en-us/sysinternals/dd535533
[edit]
coquille<br><br>Message édité par: Laurent Dardenne, à: 7/02/12 20:43
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Gaga
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 39
- Remerciements reçus 0
Je rempli mes tableaux comme ceci au fur et à mesure des itérations (très très nombreuseMais sans connaître le code posant pb,difficile de préconiser une solution plutot qu'une autre
[code:1]$tableau+=$exemple[/code:1]
je déclare le tableau en début de script comme ceci :[code:1]$tableau=@()[/code:1]
Au bout de la millième itération ça raaaaaaaaaaaame !!
Laurent écrit:
Je vais regarder ça de plus prés !! Merci.Il est préférable d'utiliser des collections en lieu et place de tableaux. Certaines permettent de préallouer un nombreux d'éléments
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
J'utilise peu cette syntaxe, en tout cas je me pose des questions sur la volumétrie avant de l'utiliser.Je rempli mes tableaux comme ceci au fur et à mesure des itérations (très très nombreuse
) :
[code:1]$tableau+=$exemple[/code:1]
Gaga écrit:
Ne cherche pas, sauf à comprendretrès très nombreuse
J'ai retrouvé un lien d' un post qui peut t'intéresser.
Utilises-tu les possibilités du pipeline ou plutot des itération via des collections temporaire ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Gaga
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 39
- Remerciements reçus 0
J'ai essayé de remplacer $tableau+=.... par $tableau.add(....) d'une collection, ça à l'air constant au niveau du remplissage sur la durée, mais le pb ne venait pas de là finalement. Il venait du fait que j'essayais de me connecter à des machines (via des méthodes de connections d'objets .com) qui répondait au bout de 2mn car l'accès était refusé !! Je scrute qq milliers de machines, donc si j'ai 50 machines qui refusent la connections ben ça fait 50*2mn d'attente pour rien !! Vais peut-être faire autrement, c.a.d envoyer un job/script par machine en parallèle et limiter le nb d'exécutions simultanées. A tester, c'est un bon exercice pour moi.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Ils ont été conçus pour ce besoinVais peut-être faire autrement, c.a.d envoyer un job/script par machine en parallèle et limiter le nb d'exécutions simultanées. A tester, c'est un bon exercice pour moi.
Tu touveras qq exemples de gestion de job sur le forum.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- Tableau interne au script qui explose