1

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

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

解决此问题的最佳方法是什么?不知何故,我不认为使用秒表来查看 IE 加载页面需要多长时间是最好的主意。除了感知延迟之外,我不知道我的缓存是否受到打击或错过。VS2008 是否有内置工具来提供帮助?

4

4 回答 4

2

我最近工作的一个项目需要检查我们的 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 秒的查询,您可以搜索该术语:

"in 0.[5-9]\d+" <-- 一切大于 0.5 秒或 "in [1-9].\d+" <-- 一切大于 1 秒

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

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

我希望这有帮助

于 2009-08-05T12:54:57.107 回答
1

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

需要关注的一件事是页面的大小(尤其是它的视图状态),这是代码执行后页面下载所需时间的重要部分。另一个是代码的某些部分渲染速度有多快,这可以通过在代码进行性能测试之前和之后调用Trace.Write来实现。

使用 ASP.NET 跟踪的性能测试部分实际上只是一个指南,因为它不容易重复,但仍然是一个很好的指南。如果您想更进一步,Visual Studio 2008 Team System 中的一些工具可能会更好(尽管我没有使用过这些工具)。还有JetBrains dotTraceANTS Profiler

于 2009-07-29T16:14:19.187 回答
0

AppDynamics 是一个非常好的应用程序性能监视器,它可以检测您的 .NET 应用程序而无需配置。我认为will可以解决您使用该工具的问题。http://www.appdynamics.com/

于 2012-04-14T04:05:35.900 回答
0

I've had very good experiences with New Relic. Very simple install, extremely clear dashboard on their site, and if you happen to host on the Rackspace or Amazon Clouds they usually offer free upgrades to Pro accounts. Check 'em out!

于 2013-04-11T17:32:27.810 回答