El código existente puede funcionar de forma correcta pero no ser eficaz, lo que da lugar a cuellos de botella de rendimiento. Algunos ejemplos de codificación que pueden afectar negativamente al rendimiento son bucles ineficaces, cálculos innecesarios y asignación de memoria excesiva.
El Copilot Chat puede identificar las zonas de rendimiento intensivo y sugerir estrategias de refactorización, como la optimización de las estructuras de datos (por ejemplo, el uso de mapas hash en lugar de matrices), la reducción de cálculos redundantes y la mejora de la eficacia algorítmica. También puede recomendar mecanismos de almacenamiento en caché u operaciones de paralelización para mejorar el rendimiento.
Escenario de ejemplo
El siguiente código de Python imprime cada número primo 1000 hasta el primo 10 000. Incluye un temporizador e imprime el tiempo que el código tarda en ejecutarse como última línea de la salida. El programa tarda varios segundos en completarse.
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")
Ejemplos de indicaciones
Optimize this code for performance
Respuesta de ejemplo
Copilot sugiere usar una función de criba para generar los números primos con mucha más eficacia. Si ejecutas este programa, se completará en una fracción de segundo.
Note
Las respuestas de Copilot Chat no son deterministas, por lo que puedes obtener una respuesta diferente a la aquí mostrada.
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")