首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

CLR 深度探索系列:Server GC 與 Workstation GC 模式全解析(垃圾回收專題三)

     編輯:關於.NET

兩大 GC 模式:架構差異與適用場景

特性Workstation GC (預設)Server GC
適用硬體單核 / 多核均可僅多核/多 CPU
Heap 結構單一 GC Heap每個邏輯處理器獨立一個 GC Heap
執行緒模型單一 GC 執行緒(或並發模式下專用背景執行緒)多執行緒並行收集,每個 Heap 對應一個專用 GC 執行緒
併發模式可選啟用 Concurrent GC不支援併發模式(本質已並行)
核心優勢低延遲、適合 UI 應用高吞吐量、極致擴展性
實現 DLLmscorwks.dll (.NET 2.0/3.5) / clr.dll (4.0+)mscorsvr.dll (2.0/3.5) / clr.dll (4.0+ 統一)

併發 GC (Concurrent GC) — Workstation 專屬

  • 在多核機器上運行 Workstation GC 時可選啟用。
  • 背景執行緒執行 Gen 2 收集,不阻塞應用執行緒(除短暫同步點)。
  • 適用場景:GUI 應用、即時系統、對延遲敏感的服務。
  • 代價:略微降低吞吐量,增加記憶體佔用(需預留空間給並發分配)。

如何識別當前進程使用的 GC 模式

方法一:tasklist 命令檢查載入的 DLL

> tasklist /m mscorwks.dll
Image Name     PID Modules
OUTLOOK.EXE    3352 mscorwks.dll
mmc.exe        2084 mscorwks.dll
w3wp.exe       3436 mscorwks.dll
  • 載入 mscorwks.dll → Workstation GC
  • 載入 mscorsvr.dll → Server GC (.NET 2.0/3.5)
  • .NET 4.0+ 統一使用 clr.dll,需用其他方式判斷。

方法二:.NET Framework 組態工具

控制台 → 管理工具 → Microsoft .NET Framework 2.0/4.x Configuration → 我的電腦 → 內容 → GC 設定頁面。預設顯示 Workstation GC。

GC 設定介面
.NET Framework 組態工具中的 GC 模式設定

應用程式層級配置:<gcServer>

非寄宿應用程式(普通 EXE)可在 app.config 指定:

<configuration>
  <runtime>
    <gcServer enabled="true" />
  </runtime>
</configuration>

關鍵限制:寄宿環境優先權

  • 若應用運行於寄宿環境(ASP.NET、SQL CLR、Windows Service 等),宿主的 GC 設定會覆蓋 app.config。
  • ASP.NET 預設強制使用 Server GC(多核下最大化吞吐)。
  • SQL CLR 強制 Workstation GC(單進程內嵌入,避免資源爭搶)。

選型決策指南

                    ┌─────────────────────┐
                    │   單核機器?        │
                    └──────────┬──────────┘
                               │
              ┌────────────────┴────────────────┐
              ▼                                 ▼
            是 ───► 唯一選擇:Workstation GC     否
                               │
              ┌────────────────┴────────────────┐
              ▼                                 ▼
        追求吞吐量?                      追求低延遲/即時響應?
              │                                 │
              ▼                                 ▼
            是 ───► Server GC               是 ───► Workstation + Concurrent GC
              │                                 │
              ▼                                 ▼
            否 ───► Workstation GC           否 ───► Workstation GC (預設)

總結

  • Server GC:多核吞吐量王者,以記憶體換效能,每核一 Heap 並行收集,ASP.NET 預設。
  • Workstation GC:通用預設,單 Heap,單核/多核皆可。
  • Concurrent GC:Workstation 專屬多核優化,背景收集不阻塞 UI,**桌面應用首選**。
  • 配置層級:宿主 > app.config > 機器預設。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved