.Net Core 程式優化原則參考
今天閱讀到一篇關於 .Net Core 程式優化文章,順手翻譯、摘錄,作為參考:
-
JIT 與 inline 篇:
已下為不會被轉譯為 inline 的函式:
1.1 大於 32 bytes 的程式碼
1.2 虛擬函式
1.3 含有除 if / else 之外的複雜流程控制的函式(例如: switch / while)
1.4 含有例外處理的程式碼,但會拋出例外的程式碼可能仍會被轉譯
1.5 傳入參數為結構或泛型 -
垃圾收集與記憶體配置篇:
可選用 cache 機制、區域物件 cache、使用 using 以有效控制物件存取範圍 -
有效率的使用 Filter 功能:
.Net Core 提供以下 5 種 Filter:
Authorization filters
Resource filters
Action filters
Exception filters
Result filters -
根據不同時機選用 DI 服務生命週期的類型:
DI 生命週期分為以下三種:
- Transient : 每次請求時都會產生新的 Instance
- Scoped : 每個 http Request 都會產生一份 Instance
- Singleton : 整個 Application 只會有一份 Instance
-
避免使用 LINQ
LINQ 難以被 JIT 優化,並且對效能有影響,但有時是不可避免使用,須謹慎評估。
另一方面,LINQ to SQL 比 LINQ 更危險,應謹慎使用。 -
重構自動產生的程式碼
自動產生的程式碼是參考,程式設計師才最懂程式架構與流程 -
.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 相似,封裝在目標平台上執行的可執行檔,僅包含應用程式程式碼與第三方套件內容 -
回應壓縮:可使用回應壓縮中介層(middleware)處理
-
使用 “完全匹配” 設定回傳 Vew
-
減少使用 HTTP 請求,改用 HTTP2
-
最小化 JS、CSS 檔案
留言