微軟在Visual Studio 2019中加入一系列功能來平行化建置工作,在最新版本中,微軟利用Multi-ToolTask​​(MTT)來處理部分既有的Vcxproj建置任務,使得這些任務更加平行,進而提升建置的吞吐量

微軟提到,在為Android開發工具的時候,他們將編譯系統clang和gcc,加到微軟的建置引擎MSBuild中,由於clang和gcc需要使用建置系統的平行化模型,但是MSBuild只有在專案層級提供平行化,因此微軟發展出了MTT,MTT是一種MSBuild任務,其放棄了MSBuild原本的批次處理系統,並且解除單一任務的限制,這使得任務能夠平行處理,並且能夠應用MSBuild中所沒有的排程功能。

而現在微軟擴展MTT的使用範圍,用來處理Vcxproj建置任務,想要啟用該功能的開發者,需要改變MSBuild屬性,或是將環境變數UseMultiToolTask設定為true,便可以啟動MTT。微軟提到,因為MTT使用內建排程器(Scheduler),所以可以利用一些功能來控制吞吐量,像是開發者可以將屬性EnforceProcessCountAcrossBuilds設定為true,就能限制MTT在跨多個專案和MSBuild實例時,所使用的程序數量,以改善超量資源預定,帶來的記憶體限制和速度降低影響。

另外,也可以使用MultiProcMaxCount或CL_MPCount屬性,定義最大作業數量,在預設情況,這兩個數值等於CPU邏輯處理器的數量。還有,在項目(Item)中設定元資料MultiToolTaskDependency,則可以在同一個MTT實例中創建與前其他項目的相依性。

微軟提醒,不同程式碼所獲得的效能提升程度不同,這個版本MTT僅支援MIDL、CL、 Clang與FXC的平行化,要是開發者的專案使用自定義建置工具,則可以利用滑鼠點擊設定,以啟用平行自定義建置工具。


Advertisement

更多 iThome相關內容