需集成miniprofiler:一、安装miniprofiler.aspnetcore及miniprofiler.entityframeworkcore包;二、在program.cs注册服务并配置useminiprofiler中间件;三、ef core中用useminiprofiler包装dbcontext;四、在_layout.cshtml嵌入miniprofiler ui;五、用profiler.step手动标记代码段计时。

如果您希望在C# Web应用中实时监控请求执行耗时、SQL查询性能及代码段耗时,则需要将MiniProfiler集成到项目中并启用其内置的性能分析视图。以下是实现该功能的具体步骤:
一、安装MiniProfiler NuGet包
MiniProfiler通过NuGet包分发,需为Web项目添加核心库及对应框架适配器。ASP.NET Core项目需同时引入基础库与MVC支持组件。
1、在Visual Studio中右键解决方案,选择“管理NuGet包”,切换至“浏览”选项卡。
2、搜索并安装 MiniProfiler.AspNetCore 包(适用于ASP.NET Core 3.1+)。
3、若项目使用Entity Framework Core,再安装 MiniProfiler.EntityFrameworkCore 包以自动拦截数据库命令。
二、配置服务与中间件
MiniProfiler需在Startup.cs(或Program.cs)中注册服务,并在请求管道中注入中间件,以捕获HTTP请求生命周期和数据库调用。
1、在 Program.cs 的构建WebApplicationBuilder阶段调用 builder.Services.AddMiniProfiler()。
2、在 app.UseMiniProfiler() 中间件插入位置必须位于 app.UseRouting() 之后、app.UseEndpoints() 之前。
3、确保调用 app.UseStaticFiles(),因MiniProfiler UI依赖静态资源文件。
三、启用数据库分析拦截
MiniProfiler需包装数据库连接与上下文,才能记录SQL执行时间、参数及执行计划摘要。EF Core场景下须替换默认DbContext注册方式。
1、在服务注册处,将 AddDbContext<AppDbContext>() 替换为 AddDbContext<AppDbContext>(options => options.UseSqlServer(connectionString).UseMiniProfiler())。
2、若使用原生DbConnection,需通过 new ProfiledDbConnection(connection, MiniProfiler.Current) 显式包装连接实例。
3、所有 ExecuteReader、ExecuteScalar 等调用将自动计入MiniProfiler会话。
四、在视图中嵌入MiniProfiler UI
MiniProfiler提供轻量级浮动UI,可动态显示当前请求的性能摘要,并支持展开查看SQL详情、调用堆栈和自定义步骤。
1、在 _Layout.cshtml 的 </body> 标签前添加 @await Html.PartialAsync("MiniProfiler")。
2、若未使用Razor Pages/MVC默认路径,需手动创建 Views/Shared/MiniProfiler.cshtml 文件,并在其中写入 @Html.MiniProfiler().RenderIncludes()。
3、确保该Partial视图不被缓存,可在控制器Action上添加 [ResponseCache(NoStore = true)] 特性。
五、手动标记代码段进行性能计时
除自动捕获外,MiniProfiler支持对任意代码块添加命名计时器,用于定位高耗时业务逻辑或第三方API调用。
1、在方法内获取当前会话: var profiler = MiniProfiler.Current;
2、使用 using (profiler.Step("计算用户积分")) 创建命名计时作用域。
3、嵌套调用中可多层Step,如 using (profiler.Step("查询订单")) 内再嵌 using (profiler.Step("校验库存"))。










