Skip to main content

Umgestalten zur Leistungsoptimierung

Copilot-Chat kann Möglichkeiten vorschlagen, 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 Leistungs-Hotspots identifizieren und Umgestaltungsstrategien vorschlagen, z. B. das Optimieren von Datenstrukturen (z. B. die Verwendung von Hashmaps anstelle von Arrays), die Reduzierung redundanter Berechnungen und die Verbesserung der algorithmischen Effizienz. 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")

Beispielaufforderung

Copilot prompt
Optimize this code for performance

Beispielantwort

Copilot schlägt vor, eine Siebfunktion zu verwenden, um die Primzahlen wesentlich effizienter zu generieren. Wenn du dieses Programm ausführst, wird es in einem Bruchteil einer Sekunde abgeschlossen.

Hinweis

Copilot-Chat Antworten sind nicht deterministisch, daher erhalten Sie möglicherweise eine andere Antwort als die hier gezeigte.

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

Weiterführende Lektüre