跳至主要内容

为性能优化进行重构

Copilot Chat 可以提供加速运行缓慢代码的方案。

现有代码可能能够正确运行,但效率低下,导致性能瓶颈。可能对性能产生不利影响的代码示例包括低效的循环、不必要的计算以及过度的内存分配。

Copilot Chat 可以识别性能热点,并提出重构策略,例如优化数据结构(例如使用哈希表而非数组)、减少冗余计算以及提升算法效率。它还可以建议使用缓存机制或并行化操作来提升性能。

示例情景

以下 Python 代码会打印第 1,000 个质数到第 10,000 个质数之间的每第 1,000 个质数。代码中包含计时器,并在输出的最后一行打印程序运行所耗费的时间。该程序需要数秒才能完成。

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

示例提示

Copilot 提示
Optimize this code for performance

示例回复

Copilot 建议使用筛法函数来更高效地生成质数。如果运行此程序,它将在不到一秒的时间内完成。

注意

Copilot Chat 的响应是非确定性的,因此你可能会得到与此处显示的不同的响应。

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

延伸阅读

© . This site is unofficial and not affiliated with GitHub, Inc.