共用方式為


逐步解說:使用特性指引最佳化

更新:2007 年 11 月

這個逐步解說會示範如何在不同案例中使用特性指引最佳化 (PGO),案例範圍從使用 Visual Studio 整合式開發環境 (IDE) 中 PGO 建置功能表的簡單實作,到需要自訂設定的進階案例。此逐步解說也會討論進階技術,這些技術能讓您使用 PGO 命令列工具,自訂收集和合併分析資料的處理序。如需概觀的詳細資訊,請參閱特性指引最佳化

使用 PGO 建置應用程式

本範例案例會說明如何使用 PGO 建置簡單的應用程式。

在 IDE 中使用 PGO 建置

特性指引最佳化可套用在任何原生 Visual C++ 專案上。下列程序會說明將 PGO 與 Win32 應用程式搭配使用。

若要建立 Win32 專案

  1. 在 [檔案] 功能表上,選取 [新增],然後再選取 [專案]。[新增專案] 對話方塊隨即出現。

  2. 在 [專案類型] 窗格中,選取 [Visual C++] 節點,然後在 [樣板] 窗格中選取 [Win32 專案]。

  3. 在 [名稱] 方塊中,輸入 PGODemo。

  4. 按一下 [確定] 按鈕。Win32 應用程式精靈出現。

  5. 保留所有預設值。按一下 [完成] 按鈕。

若要使用 PGO 建置 PGODemo 專案

  1. 在標準工具列中按一下 [方案組態] 下拉式方塊,然後選取 [發行組態]。

  2. 在 [方案總管] 中,在 PGODemo 專案節點上按一下滑鼠右鍵。在專案內容功能表中選取 [特性指引最佳化],然後選取 [檢測] 功能表項目。

  3. 在 [方案總管] 中,在 PGODemo 專案節點上按一下滑鼠右鍵。在專案內容功能表中,選取 [特性指引最佳化],然後選取 [執行檢測/最佳化應用程式],啟動您的應用程式。

    注意事項:

    您也可以藉由從 [偵錯] 功能表中選取 [啟動] 或 [啟動但不偵錯],啟動檢測的應用程式。

  4. 重複步驟 3,使用不同的案例來調整檢測的應用程式。關閉檢測的應用程式時,會在專案輸出目錄中建立 .PGC 檔,裡面會包含該次執行的分析資料。

  5. 在 [方案總管] 中,在 PGODemo 專案節點上按一下滑鼠右鍵。在專案內容功能表中選取 [特性指引最佳化],然後選取 [最佳化]。

在命令列中使用 PGO 建置

假設您想要使用 PGO 最佳化,從原始程式檔 S1,…,Sn 建置應用程式 myapp.exe。第一步就是要確定,您是使用 /GL 編譯器選項來編譯來源 S1,…,Sn。

您也需要指定符合自己需求的最佳化選項,假設您選擇 /O2 選項。值得一提的是,使用 PGO 建置應用程式,但不使用任何最佳化選項 (也就是使用 /Od),將會引發警告,而且編譯器會自動切換至 LTCG 的建置。從命令列中,您的第一步如下所示:

若要使用 /GL 編譯原始程式檔

  1. cl.exe /c /GL /O2 S1.cpp … Sn.cpp

  2. link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe

步驟 2 會建立 PGO 檢測的映像 (myapp.exe),同時也會建立分析資料庫檔案 (myapp.pgd),編譯器會使用這個檔案來建置最後最佳化的 myapp.exe。.pgd 檔的預設名稱是應用程式的名稱,而預設路徑則為輸出路徑。

您可以使用前一個步驟的連結器選項 /pgd,變更為應用程式所產生之 .pgd 檔的預設名稱。您可以依下列所示使用 /pgd:

若要使用 /LTCG:PGI 和 /PGD 建立檢測映像

  • link /ltcg:pgi /pgd:mypgd.pgd S1.obj … Sn.obj /out:myapp.exe

您現在已準備好使用分析案例來調整檢測的 myapp.exe。在您完成執行案例後,將會找到每次執行都會建立的 .pgc 檔。

注意事項:

如果您從相同的路徑執行一個以上的 myapp.exe 映像,則只會為全部的映像建立一個 .pgc 檔,而且只有在關閉所有執行個體之後,才將這個檔案寫入磁碟。

注意事項:

.pgc 檔的預設路徑是可執行檔路徑。您可以在執行分析案例之前,先藉由設定環境變數 VCPROFILE_PATH 來變更此路徑,例如先設定 VCPROFILE_PATH=<指定路徑>,然後再執行檢測的映像 myapp.exe

您已經準備好建置 PGO 最佳化的 myapp.exe。

若要使用 /LTCG:PGO 和 /PGD 建立檢測映像

  • link /ltcg:pgo /pgd:mypgd.pgd S1.obj … Sn.obj /out:myapp.exe
注意事項:

在步驟 1 之前,您需要把在調整案例期間建立的所有 .PGC 檔案,放在和分析資料庫檔案 (.PGD) 相同的資料夾中。

自訂分析資料合併

先假設您的應用程式有兩個主要的自訂案例。和第二個案例相比,第一個案例加倍重要或經常是由客戶所完成。

在下列步驟中,您會學到如何使用 Visual Studio 開發環境和命令列工具,以便在將分析資料合併至 .PGD 檔案時,提供某些較重要的分析資料。

在 IDE 中合併分析資料

若要建立 Win32 專案

  1. 在 [檔案] 功能表上,選取 [新增],然後再選取 [專案]。[新增專案] 對話方塊便會出現。

  2. 在 [專案類型] 窗格中,選取 [Visual C++] 節點,然後在 [樣板] 窗格中選取 [Win32 專案]。

  3. 在 [名稱] 方塊中,輸入 PGODemo。

  4. 按一下 [確定] 按鈕。Win32 應用程式精靈出現。

  5. 保留所有預設值。按一下 [完成] 按鈕。

若要使用 IDE 中的合併分析資料建立 PGODemo 專案

  1. 在標準工具列中,按一下 [方案組態] 下拉式方塊,然後選擇 [發行組態]。

  2. 在 [方案總管] 中,在 PGODemo 專案上按一下滑鼠右鍵。請從快速鍵功能表按一下 [特性指引最佳化],然後按一下 [檢測]。

  3. 在 [方案總管] 中,在 PGODemo 專案上按一下滑鼠右鍵。請從快速鍵功能表按一下 [特性指引最佳化],然後按一下 [執行檢測的應用程式]。這會啟動您的應用程式。請注意,您也可以按照一般方式,從 [偵錯] 功能表使用 [啟動] 或 [ 啟動但不偵錯],啟動檢測的應用程式。

  4. 重複步驟 3 兩次,各為您每一個自訂案例執行一次。此步驟會在輸出目錄中建立兩個 .PGC 檔案:PGODemo!1.pgc 和 PGODemo!2.pgc。

  5. 在 [方案總管] 中,在 PGODemo 專案上按一下滑鼠右鍵。請按一下 [屬性],PGODemo 屬性頁對話方塊便會出現。

  6. 在 [組態屬性] 中按一下 [建置事件],然後再按一下 [連結前事件]。在 [命令列] 中輸入下列命令:

    "$(VCInstallDir)bin\pgomgr.exe" -merge:2 $(OutDir)\$(ProjectName)!1.pgc $(OutDir)\$(ProjectName).pgd

    注意事項:

    在啟動連結器以建置最後的最佳化應用程式之前,這個步驟會使用 pgomgr.exe 合併不同步驟中的 PGODemo!1.pgc。在下個步驟期間,連結器將會再次呼叫 pgomgr.exe,以合併 PGODemo!2.pgc 檔 (但具有預設權數值 1)。

  7. 在 [方案總管] 中,在 PGODemo 專案上按一下滑鼠右鍵。請從快速鍵功能表按一下 [特性指引最佳化],然後按一下 [最佳化]。

從命令列合併分析資料

您可以使用命令列工具來執行自訂分析資料合併,如下所示。

若要從命令列建置合併的分析資料

  1. cl.exe /c /GL /O2 S1.cpp … Sn.cpp

  2. link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe

    前兩個步驟將會建立檢測的 myapp.exe。

  3. 使用兩個不同案例來調整檢測的 myapp.exe,會建立兩個不同的 .PGC 檔案 (myapp!1.pgc 和 myapp!2.pgc)。

    若要給予第一個案例較高的權數,請使用 pgomgr.exe,如下所示:

    Pgomgr –merge:2 myapp!1.pgc myapp.pgd

  4. 執行連結命令以建立最後的最佳化應用程式,如下所示

    link /ltcg:pgo /pgd:myapp.pgd /out:myapp.exe

    如此將會使用預設的權數值 1 來合併 myapp!2.pgc。

PGO 更新

在前兩個案例中,我們在建置和調整檢測的應用程式之後,使用了 /ltcg:pgo 連結器選項,來建置最後的最佳化應用程式。使用 /ltcg:pgo 選項時,連結器會執行某些檢查,以確定用來建置檢測之應用程式的輸入檔案 (物件檔案、程式庫等) 沒有發生變更。換句話說,若要使用 /ltcg:pgo,傳遞至連結器的所有輸入檔案,都必須與在 /ltcg:pgi 步驟中傳遞的檔案相同。

這是因為在建置檢測的應用程式之後,來源發生意外的變更,以及 .PGD 檔案可能會嚴重影響 PGO 程式碼產生和最佳化決策。

假設在建置了檢測的應用程式、建立分析資料和建置 PGO 最佳化應用程式之後,您發現自己忘記要更新應用程式的版本號碼,或您發現需要些微修正的一般錯誤,且修正動作不會嚴重影響到應用程式的流程。對於這種案例,我們提供 /ltcg:pgu 選項。使用了這個選項,連結器將不會執行使用 /ltcg:pgo 選項時所執行的檢查。您可以編輯並重新編譯檔案,或甚至將新檔案加入至 PGI 和 PGU 組建之間的應用程式。

在下列步驟中,您將會學習如何使用 Visual Studio 開發環境和命令列工具來使用 /ltcg:pgu 選項。

在 IDE 中更新

若要在 IDE 中使用 /LTCG:PGU 建置 PGODemo

  1. 在標準工具列中,按一下 [方案組態] 下拉式方塊,然後選擇 [發行組態]。

  2. 在 [方案總管] 中,在 PGODemo 專案上按一下滑鼠右鍵。從快速鍵功能表按一下 [特性指引最佳化],然後按一下 [檢測]。

  3. 在 [方案總管] 中,在 PGODemo 專案上按一下滑鼠右鍵。從快速鍵功能表按一下 [特性指引最佳化],然後按一下 [執行檢測/最佳化應用程式]。這會啟動您的應用程式。請注意,您也可以按照一般方式,從 [偵錯] 功能表使用 [啟動偵錯] 或 [啟動但不偵錯],啟動檢測的應用程式。

  4. 在這個步驟中,您可以套用任何變更至任何原始程式檔。如上所述,會嚴重影響應用程式行為的變更,可能會引發嚴重的效能衰退。通常,您可能會做出非常小的變更,例如小錯誤修正或資源檔變更。

  5. 在 [方案總管] 中,在 PGODemo 專案上按一下滑鼠右鍵。從快速鍵功能表按一下 [特性指引最佳化],然後按一下 [更新]。如此將會只重新編譯變更的檔案,然後使用 /ltcg:pgu 選項啟動連結器 (而不是 /ltcg:pgo),該選項允許已編輯的檔案。

    注意事項:

    對於沒有分析資料的每個新函式,以及在調整步驟中透過會使收集的分析資料失效的方式編輯過的每個函式,都會得到警告訊息。在標準工具列中,按一下 [方案組態] 下拉式方塊,然後選擇 [發行組態]。

    注意事項:

    在步驟 5,如果您在 [方案總管] 中,以滑鼠右鍵按一下原始程式檔的變更,然後按一下 [編譯],就會刪除輸出資料夾中的所有 PGO 相關檔案,因為當您從 PGO 組建移至一般組建時,專案系統會執行清除組建。

在命令列中更新

您可以使用命令列工具執行 PGO 更新,如下所示。

若要在命令列上使用 /LTCG:PGU 建置

  1. cl.exe /c /GL /O2 S1.cpp … Sn.cpp

  2. link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe

    前兩個步驟將會建立檢測的 myapp.exe。

  3. 調整檢測的 myapp.exe

  4. link /ltcg:pgo /pgd:myapp.pgd /out:myapp.exe

    步驟 4 將會建立最佳化的 myapp.exe。假設您在 Sm.cpp 中找到小錯誤,就可以套用修復並且只編譯 Sm.cpp,如下所示

  5. cl /c /GL /O2 Sm.cpp

    然後使用 /ltcg:pgu,建置使用步驟 3 中所建立之舊分析資料的最佳化應用程式。

  6. link /ltcg:pgu /pgd:myapp.pgd /out:myapp.exe

自訂 PGO 組態

在這個案例中,您將學習如何建立自訂 PGO 組態,以使用多個專案建置方案。在這個案例中,我們會加入 DLL 至方案,並將它連結至 PGODemo 應用程式。我們會建立兩種組態:PGIRelease 和 PGORelease,並使用它們來建置整個方案,而不是使用 [特性指引最佳化] 功能表項目一次建置每個產品。

若要建立自訂 PGO 組態

  1. 在 [檔案] 功能表上,選取 [新增],然後再選取 [專案]。[新增專案] 對話方塊便會出現。

  2. 在 [專案類型] 窗格中,選取 [Visual C++] 節點,然後在 [樣板] 窗格中選取 [Win32 專案]。

  3. 在 [名稱] 方塊中,輸入 PGODemo。

  4. 按一下 [確定] 按鈕。[Win32 應用程式精靈] 隨即出現。

  5. 保留所有預設值。按一下 [完成] 按鈕。

    現在,您將擁有方案與名為 PGODemo 的專案。接著,建立 DLL 專案。

  6. 在 [方案總管] 中,以滑鼠右鍵按一下方案,再選取 [加入]。然後按一下 [新增專案]。[新增專案] 對話方塊便會出現。

  7. 在 [專案類型] 窗格中,選取 [Visual C++] 節點,然後在 [樣板] 窗格中選取 [Win32 專案]。

  8. 在 [名稱] 方塊中輸入 PGODemoDLL。

  9. 按一下 [確定] 按鈕。Win32 應用程式精靈出現。

  10. 在 [應用程式設定] 頁面中選擇 [DLL 應用程式] 類型,然後按一下 [完成]。

    您現在會擁有名為 PGODemoDLL 的 DLL 專案。

  11. 在 [方案總管] 中,按兩下 PGODemoDLL 專案,再按兩下 PGODemoDLL.cpp,然後加入下列程式碼:

    __declspec(dllexport) void HelloMessage(void)
    {
       MessageBox(NULL, L"hello", L"PGODemoDLL", MB_OK);
    }
    
  12. 在 [方案總管] 中,按兩下 [PGODemo 專案],再按兩下 [PGODemo.cpp],然後在函式 _tWinMain 的定義之前,加入下列宣告:

    __declspec(dllimport) void HelloMessage(void);
    
  13. 在 _tWinMain 中的主要訊息迴圈之前,加入下列程式碼:

    HelloMessage();
    
  14. 在 [方案總管] 中,以滑鼠右鍵按一下 [PDODemo 方案],然後按一下 [專案相依性]。[專案相依性] 對話方塊將隨即出現。

  15. 在 [相依性] 頁面的 [專案] 下拉式方塊中,按一下選擇 [PGODemo]。檢查 [相依於] 清單中是否為 PGODemoDLL。

    接著,您將會建立 PGIRelease 和 PGORelease 組態。

  16. 在 [方案總管] 中,以滑鼠右鍵按一下方案,再按一下 [組態管理員]。然後按一下 PGODemo 專案的 [組態] 下拉式方塊,再按一下 [<新增 …>]。[新增專案組態] 對話方塊便會出現。

    在 [專案組態名稱] 編輯方塊中輸入 PGIRelease,然後選擇 [複製設定值來源] 下拉式方塊中的 [發行]。確定已核取 [建立新方案組態] 核取方塊。

    在 PGODemoDLL 專案上重複相同步驟,並將 PGIRelease 組態加入至這個專案。確定這時未核取 [建立新方案組態] 核取方塊。

  17. 為兩個專案重複步驟 16,以建立 PGORelease 組態。請確定它也有從 [發行] 組態複製設定。關閉 [組態管理員] 對話方塊。

    現在,我們已建立了兩個組態,PGIRelease 和 PGORelease。

  18. 在 [方案總管] 中,在 PGODemo 專案上按一下滑鼠右鍵,然後按一下 [屬性]。在 [組態] 下拉式方塊中選擇 PGIRelease 組態。在 [組態屬性] 中,按一下 [一般]。按一下 [整個程式最佳化] 下拉式方塊,並選擇 [特性指引最佳化 - 檢測] 選項。按一下 [套用] 儲存您的變更。

  19. 在 [組態] 下拉式方塊中選擇 PGORelease 組態。在 [組態屬性] 中,按一下 [一般]。按一下 [整個程式最佳化] 下拉式方塊,並選擇 [特性指引最佳化 - 最佳化]。按一下 [套用] 儲存您的變更。

  20. 針對 PGODemoDLL 專案的 PGIRelease 和 PGORelease 組態重複步驟 18。

    我們現在將為兩個專案,把 PGORelease 組態的 [中繼目錄] 變更為與 PGIRelease 組態的 [輸出] 目錄相同。

  21. 在 [方案總管] 中,以滑鼠右鍵按一下 [PGODemo 專案],然後按一下 [屬性]。在 [組態] 下拉式方塊中選擇 PGORelease 組態。在 [組態] 屬性中按一下 [一般]。在 [中繼目錄] 中輸入 $(SolutionDir)PGIRelease。按一下 [套用],然後關閉對話方塊。

  22. 為 PGODemoDLL 專案重複步驟 21。

    接著,我們會將 PGODemoDLL.dll 的路徑加入至 PGODemo 應用程式的 path 環境變數。

  23. 在 [方案總管] 中,以滑鼠右鍵按一下 [PGODemo 專案],然後按一下 [屬性]。在 [組態] 下拉式方塊中選擇 PGIRelease 組態。在 [組態屬性] 中按一下 [偵錯]。在 [環境] 中輸入下列文字,然後按一下 [套用]:

    path=%path%;$(SolutionDir)PGODemoDLL\PGIRelease

    在 [組態] 下拉式方塊中選擇 PGORelease 組態。在 [組態] 屬性中按一下 [偵錯]。在 [環境] 中輸入下列文字:

    path=%path%;$(SolutionDir)PGODemoDLL\PGORelease

    然後按一下 [套用],再按一下 [確定] 關閉對話方塊。

  24. 在 [方案總管] 中,在 PGODemo 專案上按一下滑鼠右鍵,然後按一下 [屬性]。在 [組態] 下拉式方塊中選擇 PGORelease 組態。在 [組態屬性] 中按一下 [連結器],然後按一下 [最佳化]。在 [特性指引資料庫] 編輯方塊中,以 $(IntDir)\ 取代 $(TargetDir)。

    為 PGODemoDLL 專案重複這個步驟。

  25. 在 [方案總管] 中,以滑鼠右鍵按一下 PGODemoDLL 專案,然後按一下 [屬性]。在 [組態] 下拉式方塊中選擇 PGORelease 組態。在 [組態屬性] 中按一下 [連結器],然後按一下 [進階]。在 [匯入程式庫] 編輯方塊中,以 $(IntDir)\ 取代 $(TargetDir)。

  26. 在標準工具列中,按一下 [方案組態] 下拉式方塊,然後選擇 PGIRelease 組態。在 [方案總管] 中,以滑鼠右鍵按一下方案,然後按一下 [建置方案]。

    這將會為兩個專案建置檢測的位元。

  27. 按一下 [偵錯] 功能表,再按一下 [啟動偵錯] 或 [啟動但不偵錯]。如此將會啟動 PGODemo。關閉應用程式之後,將會分別在下列兩個輸出資料夾中建立兩個 .PGC 檔案:PGODemo\PGIRelease 和 PGODemoDLL\PGIRelease。

  28. 在標準工具列中,按一下 [方案組態] 下拉式方塊,然後選擇 PGORelease 組態。在 [方案總管] 中,以滑鼠右鍵按一下方案,然後按一下 [建置方案]。

    現在您在 PGORelease 組態資料夾中,擁有兩個專案的 PGO 最佳化映像。

自訂分析資料集合

分析資料集合的預設行為,是儲存從啟動開始直到關閉為止,這段期間說明檢測應用程式行為的資料。PGO 包含了名為 PGOSWEEP 的工具,此工具有助於您自訂分析資料集合。您可以在分析案例執行期間,使用 PGOSWEEP 收集特定時間框架的分析資料。

在下列步驟中,您將會學習如何使用 Visual Studio 開發環境和命令列工具,來控制分析資料集合。

若要建立 Win32 專案

  1. 在 [檔案] 功能表上,選取 [新增],然後再選取 [專案]。[新增專案] 對話方塊便會出現。

  2. 在 [專案類型] 窗格中,選取 [Visual C++ 專案] 節點,然後在 [樣板] 窗格中選取 [Win32 專案]。

  3. 在 [名稱] 方塊中輸入 PGODemo。

  4. 按一下 [確定] 按鈕。[Win32 應用程式精靈] 隨即出現。

  5. 保留所有預設值。按一下 [完成] 按鈕。

若要在 IDE 中建置檢測的 PGODemo 專案

  1. 在標準工具列中,按一下 [方案組態] 下拉式方塊,然後選擇 [發行組態]。

  2. 在 [方案總管] 中,在 PGODemo 專案上按一下滑鼠右鍵。請從快速鍵功能表按一下 [特性指引最佳化],然後按一下 [檢測]。

  3. 在 [方案總管] 中,在 PGODemo 專案上按一下滑鼠右鍵。從快速鍵功能表按一下 [特性指引最佳化],然後按一下 [執行檢測/最佳化應用程式]。這會啟動您的應用程式。請注意,您也可以按照一般方式,從 [偵錯] 功能表使用 [啟動偵錯] 或 [啟動但不偵錯],啟動檢測的應用程式。

  4. 在 [工具] 功能表上按一下 [外部工具]。[外部工具] 對話方塊便會出現。按一下 [加入]。在 [標題] 編輯方塊中輸入 Pgosweep。按一下在 [命令] 編輯方塊旁邊的 [瀏覽] 按鈕,並找到 PGOSWEEP 工具的路徑。PGOSWEEP 應該是安裝於 …\VC\bin 資料夾,Visual Studio 也安裝在此處。請選取 [提示輸入引數] 核取方塊,然後按一下 [確定] 以關閉 [外部工具] 對話方塊。

  5. 從 [工具] 功能表上按一下 [Pgosweep]。會出現對話方塊。在 [引數] 編輯方塊中輸入:

    $(TargetPath) $(TargetDir)$(TargetName)_custom!1.pgc
    

    按一下 [確定]。

  6. 在 PGODemo 主視窗中按一下 [檔案],再按一下 [結束] 結束執行分析資料集合。

  7. 如果您尋找 $(OutDir),就會找到兩個 .PGC 檔案。PGODemo_custom!1.pgc 是由 PGOSWEEP 所建立的檔案,並具有從開始分析執行,到呼叫 PGOSWEEP 為止,這段期間的分析資料。第二個檔案則會有預設的命名配置 PGODemo!1.pgc,並包含清除後的時間點,到關閉檢測的應用程式為止,這段期間的分析資料。

  8. 重要的是要注意,只有遵守標準命名 $(ProjectName)!n.PGC ( n 為數字) 的 .PGC 檔案,會在您建置最佳化的影像時自動合併。若要合併在先前步驟中所建立的 PGODemo_custom!1.pgc,您必須加入自訂合併步驟 (請參閱稍早在這個逐步解說中所說明的<自訂分析資料合併案例>)。

使用了這些步驟,您可以控制分析資料集合,而這將會依據在執行階段期間應用程式最重要的部分,來最佳化您的應用程式。

從命令列收集分析資料

您可以使用命令列工具來執行自訂分析資料集合,如下所示:

若要從命令列建置合併的分析資料

  1. 建立檢測的可執行檔:

    cl.exe /c /GL /O2 S1.cpp Sn.cpp 
    link /ltcg:pgi S1.obj Sn.obj /out:myapp.exe 
    
  2. 當它在執行時,在任何想要時間點上執行檢測的 myapp.exe,並使用 pgosweep 工具來收集分析資料:

    Pgosweep myapp.exe mycustomdata.pgc
    

    注意 必須使用 Pgomgr 工具,手動合併不遵守標準格式的 PGC 檔案。

  3. 在關閉 myapp.exe 之後,將會自動建立另一個 .PGC 檔案 (myapp!1.pgc)。在您執行連結器來建置最佳化的 myapp.exe 之前,如果不想將它用來做為部分的分析資料,請確認刪除這一個檔案,並將它移至連結器工作目錄以外的區域。

  4. 使用 Pgomgr 合併 mycustomdata.pgc:

    Pgomgr –merge mycustomdata.pgc myapp.pgd
    
  5. 執行連結命令以建立最後的最佳化應用程式:

    link /ltcg:pgo /pgd:myapp
    

使用 PgoAutoSweep 自訂分析資料集合

您可在執行階段的任何時間點,從應用程式呼叫 PgoAutoSweep,儲存並重設分析資料。下列範例會示範運作的方法

下列的範例會建立兩個 .PGC 檔案。第一個檔案包含的資料,會說明在計數等於 3 以前的執行階段行為,而第二個階段所包含的,則是在這個時間點之後到應用程式結束之前,所收集到的資料。

#include <stdio.h>
#include <windows.h>
#include <pgobootrun.h>

int count = 10;
int g = 0;

void func2(void)
{
    printf("hello from func2 %d\n", count);
    Sleep(2000);
}

void func1(void)
{
    printf("hello from func1 %d\n", count);
    Sleep(2000);
}
void main(void) 
{
    while (count--)
    {
        if(g)
            func2();
        else
            func1();
        if (count == 3) 
        {
            PgoAutoSweep("func1");
            g = 1;
        }
    }
    PgoAutoSweep("func2");
}

請參閱

其他資源

Visual C++ 2008 的逐步解說