확인 하시길, 실제 목표는 최대한 빨리 코드를 작성하는 것입니다. 맞습니까?
함수를 사용하는 데 걸리는 시간을 알아내는 것으로 가정하는 것이 자연 스럽지만이를 보는 또 다른 방법이 있습니다.
프로그램이 실행되는 동안 호출 트리를 추적합니다.이 트리는 창 외부의 실제 트리와 비슷합니다. 트렁크는 main
함수와 같으며 분기가 다른 함수에서 호출되는 것과 같습니다.
각 "리프"에 일정한 시간이 걸리므로 가능한 한 많은 리프를 제거하기 위해 트리를 자르십시오 ().
한 가지 방법은 잎이 많은 가지를 찾아 잎을 잘라내는 것입니다. 또 다른 방법은 필요하지 않은 경우 전체 가지를 자르는 것입니다. 문제는 필요없는 무거운 가지를 찾는 것입니다.
하나의 뼈 - 간단한 방법은 여러 잎을 무작위로 선택하는 것입니다 (10 개씩). 각 잎은 줄기를 따라 트렁크까지 줄을 따라 추적하십시오. 모든 지점에는 리프에서 트렁크까지 몇 줄의 라인이 있습니다. 해당 분기점을 통과하는 선이 많을수록 해당 분기에 잎이 많을수록 더 많은 선을 그어 버릴 수 있습니다.
Here's how you can apply this to your program. 리프를 샘플링하려면 프로그램을 임의로 일시 중지하고 호출 스택을 살펴보십시오. 그것은 트렁크에 다시 줄입니다. 각 (기능, 호출 사이트가 아닌) 콜 사이트는 분기 지점입니다. 해당 콜 사이트가 40 %와 같이 샘플의 일부분에 있다면, 대략 얼마만큼 잘라낼 수 있습니까?
따라서 함수를 사용하는 데 걸리는 시간을 측정하는 것으로 생각하지 마십시오. 어떤 콜 사이트가 "무거운"것인지 물어 보는 것으로 생각하십시오. 그게 전부입니다.
프로그램 동작을 조사하는 데 흥미로운 접근 방법입니다. 어쩌면 소설이 아니 겠지만, 실제로 집에서 "내 프로그램이 실제로 무엇을하고 있는가?"라는 질문을 던집니다. 감사! –
@stw_dev : 네가 맞다. 어떤 이유로 든 새롭지 않고, 가르쳐주지 않는 길이다. –
@Mike : gprof를 사용해야합니까? 나는 현재 Optimize하기를 원하는 코드를 위해 Windows Machine을 사용 중이다. 아니면 CProfile이 여전히 작동합니까? 그러나 내가 뇌 주위를 완전히 감싼 후에 큰 설명. 나는 파이썬을 사용하고 있음을 잊어 버렸습니다. (속도면에서 가장 위대한 언어는 아닙니다) –