Untitled
unknown
plain_text
9 months ago
2.6 kB
15
Indexable
# =================================================================
# 1. PRÉPARATION
# =================================================================
# Changez ce nombre pour voir la différence.
# Pour des tâches très rapides, 5000 est un bon exemple.
$totalItems = 5000
$activiteTitre = "Traitement par lot (rapide et optimisé)"
$collectionATraiter = 1..$totalItems
# Démarrage du chronomètre
$stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
# =================================================================
# 2. TRAITEMENT EN BOUCLE DIRECTE (SANS JOB)
# =================================================================
# On définit la fréquence de rafraîchissement.
# Par exemple, on met à jour la barre tous les 25 éléments.
$updateFrequency = 25
for ($i = 1; $i -le $totalItems; $i++) {
$item = $collectionATraiter[$i-1] # On récupère l'élément actuel
# --- Votre code de traitement rapide va ici ---
# Simule une tâche très courte
# Par exemple : $null = $item * $item
# --- Fin du traitement ---
# !! ASTUCE DE PERFORMANCE !!
# On ne met à jour la barre de progression que si $i est un multiple de 25
if ($i % $updateFrequency -eq 0 -or $i -eq $totalItems) {
$pourcentage = ($i / $totalItems) * 100
$status = "Élément $i / $totalItems traités... [Temps : $($stopwatch.Elapsed.ToString('mm\:ss'))]"
Write-Progress -Activity $activiteTitre -Status $status -PercentComplete $pourcentage
}
}
# =================================================================
# 3. FINALISATION
# =================================================================
$stopwatch.Stop()
# Assure que la barre est bien à 100% à la fin
$statusFinal = "Terminé ! $totalItems éléments traités en $($stopwatch.Elapsed.ToString('mm\:ss\.ff'))"
Write-Progress -Activity $activiteTitre -Status $statusFinal -Completed
Write-Host $statusFinal
}
}Editor is loading...
Leave a Comment