将 MiniProfiler 的 ProfiledDbConnection 留在生产代码中是否安全?

Jim*_*mbo 3 asp.net-mvc performance profiling linq-to-sql mvc-mini-profiler

鉴于 MiniProfiler 实际上并未针对非本地请求运行,原因如下:

    protected void Application_BeginRequest()
    {
        if (Request.IsLocal)
            MiniProfiler.Start();
    }
Run Code Online (Sandbox Code Playgroud)

ProfiledDbConnection那么(在性能方面)在生产代码中保留使用还可以吗?

var db = new MyDataContext(new StackExchange.Profiling.Data.ProfiledDbConnection(new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString), MiniProfiler.Current))
Run Code Online (Sandbox Code Playgroud)

Nic*_*ver 5

简而言之:是的。

Stack Overflow 上的每个页面都在运行它,因此该连接每月的使用量约为 1000 亿次(峰值流量时 CPU 负载约为 2-4%)。它的开销极低,并且对于生产代码来说是安全的。与您即将进行的 SQL、Redis 等查询相比,分析位非常少。

我努力保持它很小,因为我们的主要用例是 Stack Overflow 规模和负载。唯一可能出现问题的方式是无限制地存储大量请求的配置文件。他们必须在某个地方消耗存储空间,这可能会成为一个问题。

对于 Stack Overflow:我们正在分析所有请求并存储缓慢的请求,以进行进一步分析并密切关注有问题的路由。因此,不仅存在分析的数据库连接,而且还对此处的所有请求进行分析。我并不是想吹嘘数字,只是提供一个希望令人信服的用例:这很好,我们正在大力抨击它,并且有保持其低开销的既得利益。