Untitled

 avatar
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