Visual Studio 效能祕訣和訣竅

Visual Studio 效能建議是要針對記憶體不足的情況,但這極少發生。 在這些情況下,您可以最佳化可能不會使用的特定 Visual Studio 功能。 下列祕訣不適合作為一般建議。

注意

如果您在使用產品時因記憶體問題而發生困難,請透過意見反應工具讓我們知道。

使用 64 位元 OS

如果您將系統從 32 位元版本的 Windows 升級至 64 位元版本,請將 Visual Studio 可用的虛擬記憶體數量從 2 GB 擴充為 4 GB。 64 位元作業系統升級可讓 Visual Studio 處理較大的工作負載。

如需詳細資訊,請參閱 Windows 和 Windows Server 版本的記憶體限制

提示

Windows 上的 Visual Studio 2022 是 64 位元應用程式。 較早版本為 32 位元。

停用自動檔案還原

Visual Studio 會自動重新開啟在上一個工作階段保持開啟的文件。 此自動檔案還原動作可能會讓載入解決方案的時間延長達 30% 以上,依開啟的專案類型及文件而定。 Windows Forms 及 XAML 這類設計工具和某些 JavaScript 與 TypeScript 檔案可能會很慢才開啟。

Visual Studio 會在自動文件還原導致解決方案載入時間變慢時,以黃色的列通知您。 您可遵循下列步驟停用自動檔案重新開啟:

  1. 選取 [工具]>[選項] 開啟 [選項] 對話方塊。

  2. 在 [專案與解決方案]>[一般] 頁面上,選取 [在解決方案載入時重新開啟文件]

若您停用自動檔案還原,則可以使用其中一個移至命令,快速瀏覽到您要開啟的檔案:

  • 若是一般移至功能,請選取 [編輯]>[移至]>[移至全部],或按 Ctrl+T

  • 您可以跳到方案中最後編輯的位置,方法是使用 [編輯]>[移至]>[移至最後編輯位置],或按 Ctrl+Shift+Backspace

  • 使用 [移至最近使用的檔案],查看最近在方案中瀏覽的檔案清單。 選取 [編輯]>[移至]>[移至最近使用的檔案],或按 Ctrl+1Ctrl+R

設定偵錯選項

如果您在偵錯工作階段期間通常會記憶體不足,則可以進行一或多個組態變更來最佳化效能。

  • 啟用 Just My Code

    最簡單的最佳化是啟用 [Just My Code] 功能,這只會載入您專案的符號。 啟用此功能可以大幅降低用於偵錯 Managed 應用程式 (.NET) 的記憶體。 根據預設,某些專案類型已經啟用此選項。

    若要啟用 [Just My Code],請選擇 [工具]>[選項]>[偵錯]>[一般],然後選取 [啟用 Just My Code]

  • 指定要載入的符號

    進行原生偵錯時,載入符號檔 (.pdb) 會耗用大量記憶體資源。 您可以設定偵錯工具符號設定來節省記憶體。 一般而言,您會將方案設定成只從您的專案載入模組。

    若要指定符號載入,請選擇 [工具]>[選項]>[偵錯]>[符號]

    設定 [僅限指定的模組] 的選項,而不是 [所有模組],然後指定您要載入的模組。 偵錯時,您也可以以滑鼠右鍵按一下 [模組] 視窗中的特定模組,以在符號載入中明確包含模組 (若要在偵錯時開啟此視窗,請選擇 [偵錯]>[視窗]>[模組])。

    如需詳細資訊,請參閱在偵錯工具中指定符號和來源檔案

  • 停用診斷工具

    建議您在使用之後停用 CPU 分析。 這項功能可能會耗用大量資源。 啟用 CPU 分析之後,會在後續偵錯工作階段之間持續保存此狀態,因此完成時適合明確地關閉它。 如果您不需要提供的功能,則在偵錯時停用診斷工具,即可節省一些資源。

    若要停用 [診斷工具],請啟動偵錯工作階段,選取 [工具][工具]>[選項]>[偵錯]>[一般],然後取消選取 [偵錯時啟用診斷工具] 選項。

    如需詳細資訊,請參閱分析工具

停用工具和延伸模組

若要改善效能,可以關閉一些工具或延伸模組。

提示

一次關閉一個延伸模組,然後重新檢查效能,通常可以隔離效能問題。

受控語言服務 (Roslyn)

如需 .NET Compiler Platform ("Roslyn") 效能考量的資訊,請參閱大型解決方案的效能考量

  • 停用 CodeLens

    Visual Studio 會對顯示的每個方法執行 [尋找所有參考] 工作。 CodeLens 會提供參考數目內嵌顯示這類功能。 工作會在不同的處理序中執行,例如 ServiceHub.RoslynCodeAnalysisService32。 在大型解決方案或資源受限的系統中,這項功能會對效能有顯著影響。 如果您遇到記憶體問題 (例如在 4 GB 電腦上載入大型解決方案時) 或此處裡序使用大量 CPU,可以停用 CodeLens 來釋出資源。

    若要停用 CodeLens,請選擇 [工具]>[選項]>[文字編輯器]>[所有語言]>[CodeLens],然後取消選取這項功能。

    如需詳細資訊,請參閱使用 CodeLens 尋找程式碼變更和其他歷程記錄

其他工具和延伸模組

  • 停用延伸模組

    延伸模組是新增至 Visual Studio 的額外軟體元件,可提供新功能或延伸現有功能。 延伸模組通常可能是記憶體資源問題的來源。 如果您遇到記憶體資源問題,請嘗試一次停用一個延伸模組,以查看它對案例或工作流程的影響。

    若要停用擴充功能,移至 [擴充功能]> [管理擴充功能],然後停用特定擴充功能。

  • 停用對應模式

    對應模式會以縮圖的方式將程式碼行顯示在捲軸上。 預設會啟用對應模式。

    若要停用對應模式,請移至 [工具]>[選項]>[文字編輯器]>[所有語言]>[捲軸],並且在 [行為] 區段中,取消選取 [使用垂直卷軸的對應模式] 選項。

  • 停用自動換行

    自動換行會顯示超出目前程式碼編輯器視窗寬度的較長程式碼行部分。 預設會開啟自動換行。

    若要將您目前正在處理的專案停用自動換行,請移至 [編輯]>[進階]>[自動換行]。 (您可以使用相同的功能表命令來切換此設定。)

    若要停用所有專案的自動換行,請移至 [工具]>[選項]>[一般]>[文字編輯器]>[所有語言]>[一般],並且在 [設定] 區段中,取消選取 [自動換行] 選項。

  • 停用 XAML 設計工具

    預設會啟用 XAML 設計工具,但只有在您開啟 .xaml 檔案時才會耗用資源。 如果您使用 XAML 檔案,但不想要使用設計工具功能,請停用這項功能,以釋出一些記憶體。

    若要停用 XAML 設計工具,請移至 [工具]>[選項]>[XAML 設計工具]>[啟用 XAML 設計工具],然後取消選取此選項。

  • 移除工作負載

    您可以使用 Visual Studio 安裝程式以移除不再使用的工作負載。 這個動作可以略過不再需要的套件和組件,來簡化啟動和執行階段成本。

  • 將未追蹤的檔案新增至本機 .gitignore

    Visual Studio 會使用未追蹤的檔案執行 Git 命令 git status,以在您將新檔案新增至存放庫時提供順暢的體驗。 當有大量未追蹤的檔案時,git status 可能會耗用額外的記憶體。 若要忽略這些檔案並改善 git status 的效能,您可以將這些檔案或資料夾新增至本機 .gitignore 檔案。 若要存取檔案,請移至 [Git]>[設定]>[Git 存放庫設定]。 然後,在 [Git 檔案] 區段中,選取 [新增] 以建立 .gitignore 檔案,或如果您已經有該檔案,請選取 [編輯]

  • 在 Git 工具中啟用認可圖表

    Visual Studio 2022 17.2 版的新功能:如果您在 Visual Studio 中檢視 Git 存放庫或分支歷程記錄時遇到延遲,我們已整合有所幫助的「認可圖表」功能。 若要使用認可圖表,務必下載並安裝 Visual Studio 2022。 若要深入了解認可圖表,請參閱 Supercharge your Git experience in Visual Studio 部落格文章。

強制執行記憶體回收

CLR 使用記憶體回收記憶體管理系統。 在此系統中,有時不再需要的物件會使用記憶體。 這種狀態是暫時的;記憶體回收行程會根據其效能和資源使用量啟發學習法來釋放這個記憶體。 您可以使用 Visual Studio 中的快速鍵,強制 CLR 收集任何未使用的記憶體。 如果有大量記憶體正在等待回收,而且您強制執行記憶體回收,則應該會在工作管理員中看到 devenv.exe 處理序的記憶體使用量下降。 很少需要使用這種方法。 不過,完成耗費資源的作業 (例如完整建置、偵錯工作階段或方案開啟事件) 之後,即可協助您判斷處理序實際正在使用的記憶體數量。 因為 Visual Studio 是混合的 (Managed 和原生),所以原生配置器和記憶體回收行程可能偶而會競爭有限的記憶體資源。 在高記憶體使用量的情況下,它有助於強制執行記憶體回收行程。

若要強制執行記憶體回收,請使用此鍵盤快速鍵:Ctrl+Alt+Shift+F12Ctrl+Alt+Shift+F12 (按兩次)。

如果可靠地強制執行記憶體回收可讓您的案例運作,請透過 Visual Studio 意見反應工具提出報表,因為這種行為可能是 Bug。

如需 CLR 記憶體回收行程的詳細描述,請參閱記憶體回收的基本概念