認識程式碼剖析工具中的檢測資料值
Visual Studio 的檢測程式碼剖析方法使用會記錄函式呼叫、程式碼行和指令的詳細執行時間資訊在進行程式碼剖析的應用程式
需求
- Visual Studio Ultimate, Visual Studio Premium, Visual Studio Professional
程式碼剖析工具的檢測程式碼剖析方法,會在已進行過程式碼剖析的二進位檔中,將程式碼插入目標函式的開頭和結尾處,以及這些函式對其他函式所進行之每項呼叫的前面和後面。 插入的程式碼會記錄下列項目:
這個收集事件和前一個收集事件間的間隔。
作業系統在該間隔內是否有執行作業。 例如,作業系統可能會讀取或寫入磁碟,或者是在目標執行緒和其他處理序的執行緒間進行切換。
需求
- Visual Studio Ultimate, Visual Studio Premium, Visual Studio Professional
對於每個間隔,程式碼剖析工具分析會重建間隔結尾處的呼叫堆疊。 呼叫堆疊是處理器的某個時間點上的作用中函式清單。 只有一個函式 (即目前的函式) 是執行中的程式碼,其他的函式是對目前函式的呼叫所產生的函式呼叫鏈結 (即呼叫堆疊)。
對於記錄間隔時呼叫堆疊上的每個函式,程式碼剖析工具分析會將間隔加入到函式的四個資料值的一個或多個資料值中。 分析會依據兩個準則,將間隔加入到函式的資料值中:
間隔是發生在函式的程式碼中,或是發生在「子函式」(Child Function) (函式所呼叫的函式) 中。
作業系統事件是否發生在間隔內。
函式間隔或資料範圍的資料值名稱為「整體內含」(Elapsed Inclusive)、「整體專有」(Elapsed Exclusive)、「應用內含」(Application Inclusive) 和「應用專有」(Application Exclusive)。
函式的所有間隔會加入到「整體內含」資料值中。
如果間隔是發生在函式的程式碼中,而不是發生在子函式中,就會將間隔加入到函式的「整體專有」資料值中。
如果間隔中沒有發生作業系統事件,就會將間隔加入到「應用內含」資料值中。
如果間隔中沒有發生作業系統事件,而且間隔是在直接執行函式程式碼時發生的 (也就是說,不是發生在子函式中),則會將間隔加入到「應用專有」資料值中。
「程式碼剖析工具」報表會針對程式碼剖析工作階段本身的函式以及工作階段的處理序、執行緒和二進位檔,彙總其總值。
整體內含值
執行函式和其子函式所花費的時間總計。
「整體內含」值包括花費在直接執行函式程式碼的間隔,以及花費在執行目標函式之子函式的間隔。 「整體內含」值也包括函式和子函式的間隔內所含的等候作業系統時間。
整體專有值
執行函式所花費的時間,不包括子函式所花費的時間。
「整體專有」(Elapsed Exclusive) 值包括花費在直接執行函式程式碼的間隔,不論作業系統事件是否發生在間隔內都一樣。 「整體專有」值不包括目標函式呼叫的子函式所花費的任何間隔。
應用內含值
執行函式和其子函式所花費的時間,不包括作業系統事件中花費的時間。
「應用內含」值的間隔不包含作業系統事件。 「應用內含」值包括花費在執行函式的所有其他間隔,不論間隔是花費在直接執行函式程式碼,或者是花費在目標函式的子函式中。
應用專有值
執行函式所花費的時間,不包括子函式中花費的時間以及作業系統事件中花費的時間。
「應用專有」值不包括內含作業系統事件的間隔,或花費在執行函式所呼叫之函式的間隔。 「應用專有」值只包括花費在直接執行函式程式碼的間隔,不包括內含作業系統事件的間隔。
整體內含百分比
對於程式碼剖析工作階段的「整體內含」值總計而言,函式、模組、執行緒或處理序的「整體內含」值所佔的百分比。
100 * 函式整體內含 / 工作階段整體內含
整體專有百分比
對於程式碼剖析工作階段的「整體內含」值總計而言,函式、模組、執行緒或處理序的「整體專有」值所佔的百分比。
100 * 函式整體專有 / 工作階段整體內含
應用內含百分比
對於程式碼剖析工作階段的「應用內含」值總計而言,函式、模組、執行緒或處理序的「應用內含」值所佔的百分比。
100 * 函式應用內含 / 工作階段應用內含
應用專有百分比
對於程式碼剖析工作階段的「應用內含」值總計而言,函式、模組、執行緒或處理序的「應用專有」值所佔的百分比。
100 * 函式應用專有 / 工作階段應用內含