所有文章 > API设计 > 优化 ASP.NET Core Web API 性能方法

优化 ASP.NET Core Web API 性能方法

优化 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 等待数据的时间越长,响应速度就越慢。

如何优化:

  • 使用索引加快数据检索速度。
  • 避免。仅获取必要的列。SELECT *
  • 对大型数据集使用分页。

下面是一个使用 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
  • 用于每个请求使用的服务。Scoped
  • 用于轻量级服务。Transient
// 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. 减少异常抛出

重要性:
引发异常可能代价高昂。它需要额外的资源来捕获、记录和处理它们。

使用方法:
避免为常规控制流抛出异常。请改用验证检查。

// 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 需求的提示,然后监控影响。逐渐地,您将看到速度和用户满意度的改进。

本文章转载微信公众号@架构师老卢

#你可能也喜欢这些API文章!