Skip to main content

Umgestalten zur Leistungsoptimierung

Copilot Chat bietet Vorschläge, einen langsam ausgeführten Code zu beschleunigen.

Vorhandener Code funktioniert möglicherweise, ist aber ineffizient, was zu Leistungsengpässen führt. Beispiele für Code, der sich negativ auf die Leistung auswirken kann, sind ineffiziente Schleifen, unnötige Berechnungen und übermäßige Speicherzuweisungen.

Copilot Chat kann Leistungshotspots ermitteln und Umgestaltungsstrategien wie das Optimieren von Datenstrukturen vorschlagen, z. B. durch Verwenden von Hashmaps anstelle von Arrays. So werden redundante Berechnungen verringert, und die algorithmische Effizienz wird verbessert. Außerdem können Zwischenspeicherungsmechanismen oder Parallelisierungsvorgänge empfohlen werden, um die Leistung zu verbessern.

Beispielszenario

Der folgende Python-Code gibt jede tausendste Primzahl bis zur zehntausendsten Primzahl an. Er enthält einen Timer und gibt an, wie lange der Code als letzte Zeile der Ausgabe ausgeführt wird. Das Programm benötigt bis zum Abschluss mehrere Sekunden.

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

Beispiel für Prompt

Optimize this code for performance

Beispielantwort

Copilot schlägt das Verwenden einer Siebfunktion zum effizienteren Generieren von Primzahlen vor. Wenn du dieses Programm ausführst, wird es in einem Bruchteil einer Sekunde abgeschlossen.

Note

Da die Copilot Chat-Antworten nicht deterministisch sind, erhältst du möglicherweise eine andere Antwort als die hier beschriebene.

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

Weitere Informationen