.Net Core 程式優化原則參考

今天閱讀到一篇關於 .Net Core 程式優化文章,順手翻譯、摘錄,作為參考:

  1. JIT 與 inline 篇:
    已下為不會被轉譯為 inline 的函式:
    1.1 大於 32 bytes 的程式碼
    1.2 虛擬函式
    1.3 含有除 if / else 之外的複雜流程控制的函式(例如: switch / while)
    1.4 含有例外處理的程式碼,但會拋出例外的程式碼可能仍會被轉譯
    1.5 傳入參數為結構或泛型

  2. 垃圾收集與記憶體配置篇:
    可選用 cache 機制、區域物件 cache、使用 using 以有效控制物件存取範圍

  3. 有效率的使用 Filter 功能:
    .Net Core 提供以下 5 種 Filter:
    Authorization filters
    Resource filters
    Action filters
    Exception filters
    Result filters

  4. 根據不同時機選用 DI 服務生命週期的類型:
    DI 生命週期分為以下三種:

  • Transient : 每次請求時都會產生新的 Instance
  • Scoped : 每個 http Request 都會產生一份 Instance
  • Singleton : 整個 Application 只會有一份 Instance
  1. 避免使用 LINQ
    LINQ 難以被 JIT 優化,並且對效能有影響,但有時是不可避免使用,須謹慎評估。
    另一方面,LINQ to SQL 比 LINQ 更危險,應謹慎使用。

  2. 重構自動產生的程式碼
    自動產生的程式碼是參考,程式設計師才最懂程式架構與流程

  3. .NET Core 應用程式發佈方式:
    7.1 Framework-dependent deployment (FDD):
    最小封裝尺寸;僅包含應用程式程式碼與第三方套件內容
    7.2 Self Contained Deployment (SCD):
    封裝包含 .Net Core 函式庫與 .NET Core runtime,可獨立執行
    7.3 Framework Dependent Executables (FDE):
    與 FDD 相似,封裝在目標平台上執行的可執行檔,僅包含應用程式程式碼與第三方套件內容

  4. 回應壓縮:可使用回應壓縮中介層(middleware)處理

  5. 使用 “完全匹配” 設定回傳 Vew

  6. 減少使用 HTTP 請求,改用 HTTP2

  7. 最小化 JS、CSS 檔案

留言