总的来说,我对 .NET 开发还很陌生。我想在我的 Web 应用程序上进行一些检测来调整性能,特别是与缓存相关的性能。我已经编写了很多自定义动态生成的 UserControls,我想尝试以不同的方式进行缓存 - 可能通过 ASPX 页面声明或以编程方式。

我还有很多相互依赖的 Oracle 查询,我想研究这些查询的缓存结果,看看什么可以提供最佳的性能提升。

解决这个问题的最佳方法是什么?不知何故,我不认为使用秒表来观察 IE 加载页面所需的时间是最好的主意。除了感知到的延迟之外,我不知道我的缓存是否被命中或错过。VS2008有内置的工具来辅助吗?

有帮助吗?

解决方案

我最近从事的一个项目需要检查 SQL 查询的时间,并在调试模式下将它们输出到调试侦听器。通过这种方式,我们可以评估 SQL 查询的时间和执行时间,以及调试我们的网站代码。

我通过将 SQL 查询集中到我们使用的 3 种 SQL 方法的包装器方法中来实现此目的:

  • 执行查询
  • 执行非查询
  • 执行标量

他们确实使用了 Stopwatch 类,但也有代码将查询转换为 SQL 语句,类似于 SQL Server Profiler 中看到的那样。

每种方法都类似于以下内容:

protected static object ExecuteScalar(SqlCommand comm, SqlParameter[] sqlParameters)
{
    Stopwatch st = new Stopwatch();
    bool errorDetected = false;

    try
    {
         comm.Parameters.Add(sqlParameters);

         using(comm)
         {
              st.Start();
              object returnValue = comm.ExecuteScalar();
              st.Stop();
              return returnValue;
         }
    }
    catch(Exception)
    {
         errorDetected = true;
         st.Stop();
         throw;
    }
    finally
    {
         string output = GetSqlStringForParameters(sqlParameters,st.Elapsed,QueryType.Scalar);

         if(errorDetected)
         {
              Debug.WriteLine("/*SQL (Errored)*/" + output,"DataAccess.SqlAdapter.ExecuteScalar");
         }
         else
         {
              Debug.WriteLine("/*SQL*/" + output,"DataAccess.SqlAdapter.ExecuteScalar");
         }
    } 
}

然后,这将在 DebugView.exe 中输出我们的 SQL 语句,如下所示:

/*SQL*/ exec spsGetOrder @OrderNumber='234567' -- Rows returned = 1 ;  1 params |--> completed NonQuery in 0.0016144 seconds. 

这样做的好处在于,虽然这些语句存在瓶颈,但我们可以将查询直接粘贴到 SQL 探查器中并获取查询的输出。这也意味着,如果您有查看日志文件的工具,则可以使用正则表达式来监视所用时间在某个范围内的位置。

因此,如果您想查找耗时超过 0.5 秒的查询,您可以搜索该术语:

“在 0.[5-9]\d+“ <-- 大于 0.5 秒的所有内容 或 “in [1-9].\d+” <-- 大于 1 秒的所有内容

这帮助我们极大地集中精力。它还可以帮助我们确定问题是否与数据库相关,或者如上所述,是 ASP.NET 问题。

最后还有一个工具叫 提琴手 它还可以帮助您在页面到达您的计算机时对其进行诊断。这为您提供了文件大小、图像/CSS 引用、下载时间等信息。这对于诊断 ViewState 大小问题也非常有用。

我希望这有帮助

其他提示

我通常采用的方法是启用ASP.NET跟踪。有一个很好的指南来启用这里。它非常详细,最重要的是它是免费的。

要关注的一件事是页面的大小(尤其是其视图状态),这是代码执行后页面下载时间的重要部分。另一个是通过调用 Trace.Write

使用ASP.NET跟踪的性能测试部分实际上只是一个指南,因为它不容易重复,但不是一个好的。如果你想加强它,Visual Studio 2008 Team System中的工具可能会更好(虽然我没有使用过)。还有 JetBrains dotTrace ANTS Profiler

AppDynamics是一款非常出色的应用程序性能监视器,可以无需配置即可检测.NET应用程序。我认为可以用这个工具来解决你的问题。 http://www.appdynamics.com/

我对 New Relic 有过非常好的体验。非常简单的安装,在他们的网站上非常清晰的仪表板,如果您碰巧托管在Rackspace或Amazon Cloud上,他们通常会免费升级到Pro帐户。检查一下!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top