VS2022 效能提升: 更快的 C++ 程式碼索引

基於 Visual Studio 2022 17。3 版本的效能提升,我們在新的 17。4 版本中添加了更多的小最佳化,且聽我慢慢道來。

不論你是一個工作在大型程式碼庫下的遊戲開發者,或者你在解決方案中有非常多的 C++ 工程,在 Visual Studio 2022 17。4 中,你都會感受到前所未有的”快”。

在 17。4 中,我們優化了 C++ 工程首次載入(冷載)下的啟動時間。

當我們做這些最佳化的時候,我們也同時考慮這些最佳化措施在真實世界中的大型 C++ 工程的表現,除了測試我們自己的工程之外,我們還測試了那些比較流行的大型遊戲工程。

大型 C++ 工程在填充用於瀏覽和導航的原始碼資料庫時,速度可能比 17。3 提高了 20-36%。

與 VS 2019 相比,此方案的累積效能增益應在2倍-6倍之間,具體取決於專案結構和規模。

在今天這篇文章中,我們想重點介紹《戰爭機器》(Gears of War)原始碼和通用虛幻引擎5入門專案的C++ 工程的程式碼索引場景。

測試環境

硬體: AMD Ryzen(銳龍) PRO 3945WX 12/24, 128GB 記憶體, 2。5TB 固態硬碟, RTX 3080

工程/原始碼:戰爭機器、虛幻引擎5入門專案、Chromium

Visual Studio:VS2019 v16。11 和 VS2022 v17。4

對於所有測試場景,我們使用了 VS 的系統事件/日誌來跟蹤操作的持續時間。

測試結果

讓我們看看過去一年我們在這一領域為 C++ 工程所做的所有改進的累積效應。

VS2022 效能提升: 更快的 C++ 程式碼索引

在 Visual Studio 2019 16。11 中,Gears of War 大約需要6分半鐘才能完全索引。在 Visual Studio 2022 17。4 中,等待索引完成只需要 2 分半鐘多一點,從而將速度提高 2。5 倍。

VS2022 效能提升: 更快的 C++ 程式碼索引

在新的虛幻引擎5解決方案中編寫程式碼時,你會看到,最新版本的 VS2022 與 VS2019 相比有了巨大的改進。在VS2019 16。11中,完全索引全新的UE5 C++解決方案需要2分半鐘多一點的時間。使用 VS2022 17。4 時,將同一 UE5 解決方案完全索引現在只需 1 分鐘即可提高 2。7 倍。無論你是建立新的UE5專案還是從現有儲存庫克隆,你的程式碼在17。4中都會更快地索引。

突破極限

很少有開源專案達到 Chromium 的規模,在一個 Visual Studio 解決方案中有超過 12000 個專案,因此自然而然地,它是對我們正在改進的元件進行壓力測試的不可抗拒的目標。讓我們看看我們是如何做到的。

VS2022 效能提升: 更快的 C++ 程式碼索引

在 Visual Studio 2019 16。11 中,Chromium 儲存庫大約需要31分鐘才能完全索引。在 Visual Studio 2022 17。4 中,等待索引完成只需 5 分鐘,速度提高了 6 倍。首次索引大型解決方案(如 Chromium 儲存庫)時,使用最新版本的 Visual Studio 最多可節省 26 分鐘。

試試看

儘管每個人都應該看到這些方案的顯著改進,但收益的大小取決於你的原始碼、專案佈局、程式碼架構等。因此,請在你的程式碼庫中試用它,看看你的使用體驗是否如這裡所說的那樣”快”,正所謂:光說不練假把式。

總結

我撓破了頭皮也沒想明白兩個問題:

> 老大哥你為什麼這麼強?

> Chromium 有 12000 個工程?Holly席特!(戰術後仰:什麼叫大型 C++ 工程 !)

看來,革命還未成功,我還需努力啊。

最後

Microsoft Visual C++團隊的部落格是我非常喜歡的部落格之一,裡面有很多關於Visual C++的知識和最新開發進展。大浪淘沙,如果你對Visual C++這門古老的技術還是那麼感興趣,則可以經常去他們那(或者我這)逛逛。

本文來自:《Visual Studio 2022 Performance: Faster C++ Source Code Indexing》

VS2022 效能提升: 更快的 C++ 程式碼索引