Masalahnya adalah frasa "di mana waktu yang paling banyak dihabiskan" adalah ambigu.
Jika itu berarti "di mana penghitung program paling sering ditemukan" maka saya telah melihat program di mana waktu terbanyak dihabiskan dalam fungsi string, membandingkan memori, mengalokasikan fungsi perpustakaan matematika. Dengan kata lain, fungsi yang tidak boleh disentuh oleh programmer sehari-hari.
Jika itu berarti "di mana dalam kode programmer adalah pernyataan yang dieksekusi yang menghabiskan sebagian besar waktu" itu adalah konsep yang lebih berguna.
Masalah dengan konsep "kode yang disebut paling" adalah, jumlah waktu yang dibutuhkan adalah produk dari seberapa sering dipanggil dan berapa banyak waktu yang dibutuhkan per panggilan (termasuk callees dan I / O). Karena jumlah waktu yang dibutuhkan dapat bervariasi pada beberapa urutan besarnya, berapa kali disebut tidak memberi tahu Anda berapa banyak masalah itu. Fungsi A dapat disebut 10 kali dan mengambil 0,1 detik, sedangkan fungsi B dapat disebut 1000 kali dan mengambil mikrodetik.
Satu hal yang akan memberi tahu Anda di mana mencarinya adalah ini: Setiap kali satu baris kode menyebabkan waktu untuk dihabiskan, ia berada di tumpukan . Jadi, misalnya, jika garis kode adalah hot spot, atau jika itu adalah panggilan ke fungsi perpustakaan, atau jika itu adalah panggilan ke-20 dalam pohon panggilan 30-tingkat, jika itu bertanggung jawab untuk 20% dari waktu , maka itu di tumpukan 20% dari waktu. Sampel waktu-acak tumpukan akan masing-masing memiliki peluang 20% untuk menampilkannya. Terlebih lagi, jika sampel dapat diambil selama I / O, mereka akan menunjukkan kepada Anda apa yang menyebabkan I / O, yang bisa sama borosnya dengan siklus CPU yang terbuang.
Dan ini benar-benar independen dari berapa kali dipanggil.