優化 ASP.NET Core Web API 性能

開發人員嗨,構建高性能的 ASP.NET Core Web API 非常重要。它可以幫助用戶享受更快的交互并降低服務器成本。本文將指導你了解 ASP.NET Core Web API 的一些實用性能優化技巧。

1. 使用異步代碼

重要性:
異步代碼允許您的應用程序同時處理更多請求。因為它在等待任務完成的同時釋放了資源。

如何使用:
用于 I/O 操作,如數據庫調用、文件讀取和網絡請求。ASP.NET Core 適用于異步代碼。這是提高性能的好方法。asyncawait

public async Task<IActionResult> GetData()  
{
var data = await _dataService.GetDataAsync();
return Ok(data);
}

2. 啟用響應緩存

重要性:
緩存可以通過存儲響應來節省時間。當類似的請求再次出現時,服務器可以返回緩存的響應,而無需再次處理它。

如何使用:
使用 attribute 來緩存響應。您可以指定數據應緩存多長時間。對于靜態數據,緩存可以顯著降低服務器負載。[ResponseCache]

[HttpGet]  
[ResponseCache(Duration = 60)]
public IActionResult GetStaticData()
{
return Ok("This is cached data.");
}

3. 優化數據庫查詢

重要性:
緩慢的數據庫查詢會損害 API 性能。API 等待數據的時間越長,響應速度就越慢。

如何優化:

下面是一個使用 pagination 的示例:

public async Task<IActionResult> GetPagedData(int page = 1, int pageSize = 10)  
{
var data = await _context.Data
.Skip((page - 1) * pageSize)
.Take(pageSize)
.ToListAsync();
return Ok(data);
}

4. 使用依賴注入

重要性:
依賴注入 (DI) 改進了代碼組織和測試。但是,管理不善的 DI 可能會導致性能問題。

使用方法:
正確設置服務生命周期:

// Singleton service for static data  
services.AddSingleton<IStaticDataService, StaticDataService>();
// Scoped service for per-request data
services.AddScoped<IRequestService, RequestService>();
// Transient service for lightweight operations
services.AddTransient<IUtilityService, UtilityService>();

5. 最小化中間件

重要性:
每個 middleware 都會為每個請求增加處理時間。太多的中間件會降低 API 的速度。

如何使用:
只添加必要的中間件。避免添加不需要的中間件。

var app = builder.Build();  

app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});

6. 啟用 HTTP 壓縮

重要性:
壓縮會減小響應大小。較小的響應傳輸和加載速度更快。

使用方法:
在 中啟用響應壓縮。使用 Gzip 或 Brotli 壓縮以獲得常見的性能提升。Startup.cs

public void ConfigureServices(IServiceCollection services)  
{
services.AddResponseCompression(options =>
{
options.EnableForHttps = true;
});
}

7. 使用 JSON 序列化選項

重要性:
ASP.NET Core 使用 JSON 來格式化響應。優化序列化可縮短處理時間。

如何使用:
使用代替 .它速度更快,并針對 .NET Core 進行了優化。此外,如果不需要,請禁用區分大小寫和默認 null 值等功能。System.Text.JsonNewtonsoft.Json

public void ConfigureServices(IServiceCollection services)  
{
services.AddControllers().AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null;
options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
});
}

8. 使用內容托管網絡 (CDN)

重要性:
如果您提供靜態文件(如圖像和腳本),CDN 可以提供幫助。CDN 將文件存儲在世界各地的許多地方。用戶可以從附近的位置加載文件,從而加快加載速度。

如何使用:
在 CDN 上托管靜態文件或為您的服務器啟用 CDN。在 API 或前端代碼中使用指向這些文件的鏈接。

9. 減少異常拋出

重要性:
引發異??赡艽鷥r高昂。它需要額外的資源來捕獲、記錄和處理它們。

使用方法:
避免為常規控制流拋出異常。請改用驗證檢查。

// Instead of throwing an exception, return a 404 if not found  
var data = await _dataService.GetDataByIdAsync(id);
if (data == null)
{
return NotFound();
}
return Ok(data);

12. 分析和監控您的 API

重要性:
監控可讓您跟蹤一段時間內的性能。您可以找到瓶頸和需要改進的領域。

如何使用:
使用 Application Insights、Prometheus 或 Grafana 等工具。跟蹤請求持續時間、錯誤率和內存使用情況等指標。

// Sample Application Insights setup  
services.AddApplicationInsightsTelemetry(Configuration["APPINSIGHTS_CONNECTIONSTRING"]);

13. 使用 DTO 優化數據傳輸

重要性:
通過網絡發送大型對象會減慢響應時間。數據傳輸對象 (DTO) 是數據模型的簡化版本,僅包含必要的字段。

如何使用:
為每個請求/響應創建 DTO 并僅映射所需的屬性。

public class UserDto  
{
public int Id { get; set; }
public string Name { get; set; }
}

然后,將數據模型映射到 DTO:

var userDto = new UserDto { Id = user.Id, Name = user.Name };  
return Ok(userDto);

14. 使用連接池

重要性:
數據庫連接的打開和關閉速度可能很慢。連接池重用現有連接,從而提高速度。

如何使用:
默認情況下,大多數 ASP.NET Core 數據庫庫都支持池化。對于 SQL 數據庫,默認情況下,在 Entity Framework Core 中啟用連接池。只需確保配置正確即可。

15. 使用 Redis 進行緩存

重要性:
內存緩存速度很快,但 Redis 可以在多個服務器上提供分布式緩存。

如何使用:
在 ASP.NET Core 中將 Redis 設置為分布式緩存。將其配置為緩存經常訪問的數據,如用戶會話。

services.AddStackExchangeRedisCache(options =>  
{
options.Configuration = "localhost:6379";
});

16. 避免過度使用 LINQ

重要性:
LINQ 查詢使代碼可讀,但對于復雜操作可能會變慢。避免在性能敏感的代碼中使用它。

如何使用:
如果性能至關重要,請用優化的替代方案替換復雜的 LINQ 查詢。有時,直接 SQL 查詢更快。

// Inefficient LINQ query  
var data = _context.Data.Where(x => x.IsActive).ToList();
// More efficient alternative
var data = _context.Data.FromSqlRaw("SELECT * FROM Data WHERE IsActive = 1").ToList();

提高 ASP.NET Core Web API 的性能需要時間和測試。這些提示可以通過減少服務器負載和響應時間來發揮作用。首先應用一些符合您的 API 需求的提示,然后監控影響。逐漸地,您將看到速度和用戶滿意度的改進。

本文章轉載微信公眾號@架構師老盧

上一篇:

vue 中 Axios 的封裝和 API 接口的管理

下一篇:

22條API設計的最佳實踐
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費