Question Tableau interne au script qui explose

Plus d'informations
il y a 14 ans 1 mois #11058 par Gaga
Salut,

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.

Plus d'informations
il y a 14 ans 1 mois #11064 par Laurent Dardenne
Gaga écrit:

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 ?

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.

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.

Plus d'informations
il y a 14 ans 1 mois #11065 par Gaga
Laurent écrit:

Mais sans connaître le code posant pb,difficile de préconiser une solution plutot qu'une autre

Je rempli mes tableaux comme ceci au fur et à mesure des itérations (très très nombreuse :P) :
[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:

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

Je vais regarder ça de plus prés !! Merci.

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

Plus d'informations
il y a 14 ans 1 mois #11069 par Laurent Dardenne
Gaga écrit:

Je rempli mes tableaux comme ceci au fur et à mesure des itérations (très très nombreuse :P) :
[code:1]$tableau+=$exemple[/code:1]

J'utilise peu cette syntaxe, en tout cas je me pose des questions sur la volumétrie avant de l'utiliser.
Gaga écrit:

très très nombreuse

Ne cherche pas, sauf à comprendre :)

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.

Plus d'informations
il y a 14 ans 1 mois #11076 par Gaga
Merci pour ton lien très très instructif, je vais sérieusement m'en inspirer pour mes futures scripts.
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.

Plus d'informations
il y a 14 ans 1 mois #11078 par Laurent Dardenne
Gaga écrit:

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.

Ils ont été conçus pour ce besoin ;)
Tu touveras qq exemples de gestion de job sur le forum.

Tutoriels PowerShell

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

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