Skip to main content

Refactorisation pour optimiser les performances

Discussion avec Copilot peut vous suggérer des moyens d'accélérer l'exécution d'un code lent.

Le code existant peut fonctionner correctement, mais être inefficace, ce qui entraîne des goulots d'étranglement des performances. Des exemples de code pouvant nuire aux performances incluent les boucles inefficaces, les calculs inutiles et l'allocation excessive de mémoire.

Discussion avec Copilot peut identifier les points critiques de performance et vous suggérer des stratégies de refactorisation, telles qu'une optimisation des structures de données (par exemple, utiliser des tables de hachage au lieu de tableaux), une réduction des calculs redondants et une amélioration de l'efficacité des algorithmes. Il peut également vous recommander des mécanismes de mise en cache ou des opérations de parallélisation pour améliorer les performances.

Exemple de scénario

Le code Python suivant affiche chaque 1 000ᵉ nombre premier jusqu'au 10 000ᵉ nombre premier. Il inclut un minuteur et imprime la durée d'exécution du code comme dernière ligne de la sortie. Le programme prend plusieurs secondes pour s'exécuter.

import time

def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

def every_1000th_prime():
    primes = []
    num = 2
    while len(primes) < 10000:
        if is_prime(num):
            primes.append(num)
        num += 1
    return [primes[i] for i in range(999, 10000, 1000)]

if __name__ == "__main__":
    start_time = time.time()
    primes = every_1000th_prime()
    for prime in primes:
        print(prime)
    end_time = time.time()
    elapsed_time = end_time - start_time
    print(f"Time taken: {elapsed_time:.10f} seconds")

Exemples d’invite

Copilot Chat prompt
Optimize this code for performance

Exemple de réponse

Copilot propose d'utiliser une fonction de crible pour générer les nombres premiers de manière beaucoup plus efficace. Si vous exécutez ce programme, il s'achèvera en une fraction de seconde.

Remarque

Les réponses de Discussion avec Copilot sont non déterministes, vous pouvez donc obtenir une réponse différente de celle présentée ici.

import time

def sieve_of_eratosthenes(limit):
    sieve = [True] * (limit + 1)
    sieve[0] = sieve[1] = False
    for start in range(2, int(limit**0.5) + 1):
        if sieve[start]:
            for multiple in range(start*start, limit + 1, start):
                sieve[multiple] = False
    return [num for num, is_prime in enumerate(sieve) if is_prime]

def every_1000th_prime():
    limit = 105000  # Higher than needed to ensure 10,000 primes
    primes = sieve_of_eratosthenes(limit)
    return [primes[i] for i in range(999, 10000, 1000)]

if __name__ == "__main__":
    start_time = time.time()
    primes = every_1000th_prime()
    for prime in primes:
        print(prime)
    end_time = time.time()
    elapsed_time = end_time - start_time
    print(f"Time taken: {elapsed_time:.10f} seconds")

Pour aller plus loin