Skip to main content

Refactorización para la optimización del rendimiento

Chat de Copiloto puede sugerir maneras de acelerar el código de ejecución lenta.

El código existente puede funcionar correctamente pero ser ineficiente, lo que da lugar a problemas 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.

Chat de Copiloto puede identificar zonas activas de rendimiento y sugerir estrategias de refactorización, como optimizar estructuras de datos (por ejemplo, usar mapas hash en lugar de matrices), reducir los cálculos redundantes y mejorar la eficiencia 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")

Mensaje de ejemplo

Copilot prompt
Optimize this code for performance

Respuesta de ejemplo

Copilot sugiere el uso de una función de sieve para generar los números primos de forma mucho más eficaz. Si ejecutas este programa, se completará en una fracción de segundo.

Nota:

Chat de Copiloto las respuestas son no deterministas, por lo que puede obtener una respuesta diferente de la que se muestra aquí.

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")

Lectura adicional