Skip to main content

パフォーマンスの最適化のためのリファクタリング

Copilot Chat は、実行の遅いコードを高速化する方法を提案できます。

既存のコードが、正しく機能するものの非効率的で、パフォーマンスのボトルネックになっていることがあります。 パフォーマンスに悪影響を与える可能性があるコーディングの例としては、効率の悪いループ、不要な計算、過剰なメモリ割り当てなどがあります。

Copilot Chat は、パフォーマンスのホットスポットを特定して、データ構造の最適化 (たとえば、配列の代わりにハッシュマップを使う)、冗長な計算の削減、アルゴリズムの効率の向上などのリファクタリング戦略を提案できます。 また、パフォーマンスを向上させるために、キャッシュ メカニズムや並列化操作を推奨することもできます。

サンプル シナリオ

次の Python コードでは、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")

プロンプトの例

Optimize this code for performance

応答の例

Copilot は、ふるい関数を使って素数をより効率的に生成することを提案します。 このプログラムを実行すると、ほんの一瞬で完了します。

Note

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

参考資料