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

추가 참고 자료