성능 호출 그래프 및 메소드 세부사항 보기를 사용하면 대부분의 시간을 소비하는 어플리케이션의 파트를 식별하는 데 도움이 됩니다. 그런 다음 이 시간이 소요되는 영역을 보다 효율적으로 만들 수 있는지 여부를 조사할 수 있습니다. 어플리케이션에 대한 코드를 분석할 때, 비효율적인 성능을 야기하는 가장 빈번한 코딩 오류를 인식하는 것이 유용합니다.
불필요한 계산: 어플리케이션이 진화하고 알고리즘이 개선됨에 따라 또는 데이터가 변경됨에 따라, 이전 버전에서 필요했던 코드의 부분이 제거되지 않은 상태로 더 이상 사용되지 않을 수 있습니다. 이로 인해 다수의 대형 프로그램이 해당 결과가 사용되지도 않는 계산을 수행하게 됩니다. 병목 현상은 이 사장된 코드에서 소비되는 시간에 의해 야기됩니다.
기타 일반적인 불필요한 계산은 필요하지 않음에도 불구하고 자동으로 또는 기본적으로 실행되는 계산입니다. 해당 사용자가 없어도 워크스테이션에 대한 연결을 열거나 프로그램 종료 중에 데이터 구조를 불필요하게 사용 가능하게 하는 어플리케이션은 이러한 유형의 병목 현상의 예입니다. 성능을 프로파일하여 사장된 코드에서 소비되는 시간을 찾을 수 있습니다. 일단 계산 결과가 불필요하다고 확신하면 해당 코드를 제거할 수 있습니다.
너무 이른 계산: 해당 결과가 필요하기 전에 수행되는 모든 계산은 병목 현상을 야기할 수 있습니다. 예를 들어, 정렬을 수행해야 한다고 사용자가 요청한 경우에 숫자의 목록을 정렬할 필요가 없을 수 있습니다. 계산이 지연될 수 있는지 여부를 성능 데이터가 사용자에게 알려줄 수 없습니다. 그러나 계산 비용을 알려줄 수 있으므로 사용자는 계산을 연기할 지 여부를 결정할 수 있습니다.
불필요한 재계산: 나중에 사용하기 위해 캐싱하는 대신에 프로그램이 필요한 값을 다시 계산하는 경우가 종종 있습니다. 예를 들어, 한 상수 문자열의 길이를 판별하는 계산이 루프에 임베드된 경우, 결과적으로 불필요한 계산이 수행될 수 있습니다. 문자열의 길이는 여러 차례 다시 계산되며, 매번 동일한 값을 얻습니다. 성능 데이터는 재계산이 발생하는 위치를 알려줄 수 있으며, 사용자는 한 번의 계산이 실행된 후에 값을 저장하도록 결정할 수 있습니다.
불충분한 계산: 알고리즘 또는 데이터 구조 레이아웃을 잘못 선택하면 프로그램에 대해 추가 작업을 야기할 수 있습니다. 소규모의 데이터 세트의 경우에는 초기 성능이 적절해 보일 수 있지만, 보다 크고 복잡한 데이터 세트가 제시되면 배율이 잘못될 수 있습니다. 성능 프로파일링은 상이한 배율에서 각 계산 비용을 알려줄 수 있으므로, 보다 큰 규모의 데이터 세트에서 문제점이 발생할지 여부를 예측할 수 있습니다. 그러면 작업이 보다 빨리 진행되는 대체 알고리즘 및 데이터 구조를 사용할 수 있습니다.
또한 메모리 누수 및 스레드 병목 현상은 성능을 떨어뜨릴 수 있습니다. 누수 발견 및 스레드 분석 프로파일링 세트를 사용하여 이러한 문제점의 해결을 위한 데이터를 수집하십시오. 참고로, 기타 런타임 분석 데이터를 수집함과 동시에 누수 발견 데이터를 수집할 수는 없습니다.