{"meta":{"title":"为性能优化而重构","intro":"副驾驶聊天 可以提出加快运行缓慢的代码的方法建议。","product":"GitHub Copilot","breadcrumbs":[{"href":"/zh/copilot","title":"GitHub Copilot"},{"href":"/zh/copilot/tutorials","title":"教程"},{"href":"/zh/copilot/tutorials/copilot-chat-cookbook","title":"GitHub Copilot Chat 指南"},{"href":"/zh/copilot/tutorials/copilot-chat-cookbook/refactor-code","title":"重构代码"},{"href":"/zh/copilot/tutorials/copilot-chat-cookbook/refactor-code/refactor-for-optimization","title":"重构以优化"}],"documentType":"article"},"body":"# 为性能优化而重构\n\n副驾驶聊天 可以提出加快运行缓慢的代码的方法建议。\n\n现有代码可能能正常运行，但效率低下，会导致性能瓶颈。 可能影响性能的编码示例包括低效循环、不必要的计算和过度的内存分配。\n\n副驾驶聊天 可以识别性能热点并提出重构策略，例如优化数据结构（如使用哈希表代替数组）、减少冗余计算、提升算法效率。 它还可以推荐缓存机制或并行化操作以提高性能。\n\n## 示例方案\n\n下面的 Python 代码打印前 10,000 个质数中每 1000 个质数。 代码包含计时器，并在输出的最后一行打印运行所需时间。 程序运行需要几秒钟才能完成。\n\n```python id=slow-prime\nimport time\n\ndef is_prime(n):\n    if n <= 1:\n        return False\n    for i in range(2, n):\n        if n % i == 0:\n            return False\n    return True\n\ndef every_1000th_prime():\n    primes = []\n    num = 2\n    while len(primes) < 10000:\n        if is_prime(num):\n            primes.append(num)\n        num += 1\n    return [primes[i] for i in range(999, 10000, 1000)]\n\nif __name__ == \"__main__\":\n    start_time = time.time()\n    primes = every_1000th_prime()\n    for prime in primes:\n        print(prime)\n    end_time = time.time()\n    elapsed_time = end_time - start_time\n    print(f\"Time taken: {elapsed_time:.10f} seconds\")\n```\n\n## 示例提示\n\n```copilot copy prompt ref=slow-prime\nOptimize this code for performance\n```\n\n## 示例响应\n\nCopilot 建议使用筛法函数以更高效地生成质数。 如果运行此程序，完成时间将缩短至不到一秒。\n\n> \\[!NOTE] 副驾驶聊天 的响应具有非确定性，因此可能得到与此处示例不同的回复。\n\n```python\nimport time\n\ndef sieve_of_eratosthenes(limit):\n    sieve = [True] * (limit + 1)\n    sieve[0] = sieve[1] = False\n    for start in range(2, int(limit**0.5) + 1):\n        if sieve[start]:\n            for multiple in range(start*start, limit + 1, start):\n                sieve[multiple] = False\n    return [num for num, is_prime in enumerate(sieve) if is_prime]\n\ndef every_1000th_prime():\n    limit = 105000  # Higher than needed to ensure 10,000 primes\n    primes = sieve_of_eratosthenes(limit)\n    return [primes[i] for i in range(999, 10000, 1000)]\n\nif __name__ == \"__main__\":\n    start_time = time.time()\n    primes = every_1000th_prime()\n    for prime in primes:\n        print(prime)\n    end_time = time.time()\n    elapsed_time = end_time - start_time\n    print(f\"Time taken: {elapsed_time:.10f} seconds\")\n```\n\n## 其他阅读材料\n\n* [GitHub Copilot 对话助手的提示设计](/zh/copilot/using-github-copilot/prompt-engineering-for-github-copilot)\n* [使用 GitHub Copilot 的最佳做法](/zh/copilot/using-github-copilot/best-practices-for-using-github-copilot)"}