ASP.NET Web 应用程序上的代码检测
-
05-07-2019 - |
题
总的来说,我对 .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帐户。检查一下!