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