You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Visual Studio代码执行时间分析工具排查.Net Core应用性能变慢问题

.NET Core 运行时性能下降与代码级耗时排查方案

官方内置诊断工具

  • dotnet-trace 是.NET 官方提供的跨平台无侵入性能跟踪工具,无需修改代码即可捕获运行中进程的CPU采样数据:
    1. 执行dotnet ps获取目标应用的进程ID
    2. 执行dotnet trace collect -p <进程ID> --providers Microsoft-DotNETCore-SampleProfiler启动跟踪
    3. 复现性能下降问题后停止跟踪,生成的.nettrace文件可通过Visual Studio或PerfView打开,直接查看各代码段的CPU占比、执行时长,逐层展开调用栈即可定位到耗时最高的具体代码行。
  • 若使用Visual Studio开发,可直接启动内置的性能探查器,选择「CPU使用率」选项附加到运行中的目标进程,采样结束后会直接在代码编辑界面标注每行代码的执行耗时,多层架构的调用路径也会完整展示。

针对性模块埋点排查

  • 对于怀疑有性能问题的特定业务模块,可使用Stopwatch类包裹代码块直接统计执行时长;若需要全量统计多层架构的方法耗时,可通过AspectCore、Castle DynamicProxy等AOP框架添加全局拦截器,无侵入式统计每个方法的执行时长、入参、返回状态,运行一段时间后即可捞出耗时Top N的方法,再缩小范围排查方法内部代码。
  • 若为ASP.NET Core应用,可先注册自定义中间件统计每个接口的总耗时,先定位到性能劣化的接口,再向下排查对应调用的业务逻辑、数据访问逻辑。

关联排查内存/资源泄漏问题

你描述的「初始运行快、运行一段时间后性能下降」的特征,大概率和内存泄漏、资源未释放有关,排查耗时的同时建议同步验证此类问题:

  • 执行dotnet-dump collect -p <进程ID>捕获进程转储文件,通过dotnet analyze或Visual Studio分析对象存活情况,排查是否存在大对象未释放、数据库连接池耗尽、缓存无限增长等问题,此类问题会导致GC频繁触发,整体性能随运行时间逐步下降。
  • 检查EF Core上下文的生命周期配置,确认是否存在上下文长时间未释放、追踪的实体对象持续累积导致查询耗时线性增长的问题。

精确代码级性能基准测试

如果需要获取某段代码的精确执行耗时(而非采样占比),可使用BenchmarkDotNet编写微基准测试,将怀疑有问题的代码段抽离后单独运行测试,工具会输出精确到微秒级的执行耗时、内存分配量、GC触发次数等数据,误差极低。

内容的提问来源于stack exchange,提问作者Moulali Shaik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:36:05