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 d’accès aux performances et suggérer des stratégies de refactorisation telles que l’optimisation des structures de données (par exemple, l’utilisation de hachages au lieu de tableaux), la réduction des calculs redondants et l’amélioration de l’efficacité algorithmique. 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")
Exemple d’invite
Optimize this code for performance
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")
Optimize this code for performance
Optimize this code for performance
Exemple de réponse
Copilot suggère d’utiliser une fonction de tamis pour générer les nombres premiers beaucoup plus efficacement. Si vous exécutez ce programme, il s'achèvera en une fraction de seconde.
Remarque
Discussion avec Copilot les réponses ne sont pas 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")