缓慢的ASP.NET应用程序加载时间 - 我可以跟踪/跟踪/计算整个加载周期吗?

时间:2009-11-07 05:57:31

标签: asp.net performance w3wp load-time

我正在处理的ASP.NET Web应用程序项目随着时间的推移而变得越来越慢(在IIS或.NET开发服务器中)。目前需要:

  • 通过F5调试加载1:28分钟
  • 在构建(不重建)之后在浏览器中刷新41秒

该机器速度相当快 - 一台Core 2 Quad 2.40ghz,8 gig o'RAM,在HyperV下运行dev机器,分配给开发虚拟机2 GB。

有没有办法跟踪/报告初始加载的整个周期?如果我能看到基本的IIS工作进程启动需要多长时间,加载DLL,运行实际的.NET代码,那就太好了。

我知道我可以在代码上使用分析器 - 这没有发现任何超慢的DB连接建立时间,但我想在处理实际页面之前对这些东西的性能有一些了解。我可以看到CPU监视器在进程中间有点达到100%,RAM使用量略有增加 - 但我正在寻找更好的洞察力,希望能够稍微修剪一下。

虽然我没有在项目开始时(4个月前)进行任何测量,但我完全可以确定重装是一个相对轻而易举的事。

任何帮助非常感谢, 程序员谁灿只能饮那么多的咖啡,而-A-积聚发生。

更新

JetBrain的 dotTrace 非常出色(对于这个例子),谢谢。它具有启动Web项目的完美界面,并且很快突出显示大部分时间都在 Application_Start()(在 Global.asax 中)中进行。

其他选项不会这样做,因为:

  • 跟踪选项仅从 PreInit,错过了 Application_Start()调用。

  • StopWatch 调用会有 要求我知道在哪里看,或者 回到昔日的美好时光 printf式调试......

  • nprof 想要定位.exe,哪个 尝试连接到新的w3wp.exe实例时会错过目标区域...

6 个答案:

答案 0 :(得分:6)

为什么不使用ASP.NET Trace功能。使用trace.axd分析请求。

这可能有用:

http://msdn.microsoft.com/en-us/library/ms972204.aspx

http://msdn.microsoft.com/en-us/library/wwh16c6c.aspx

答案 1 :(得分:5)

JetBrains dotTrace这样的探查器应该告诉你你的瓶颈在哪里......如果你没有看到任何不寻常的东西(即方法上的漫长过程时间)那么它就不是你的申请。一定是环境。可能是因为您正在使用Active Directory并且对Active Directory的调用正在挂起...是否有Web服务调用?您使用的是Team Systems吗?是否有后期制作流程?

对我而言,听起来有些事情已经超时了。这就是你等待这么久的原因。

答案 2 :(得分:4)

过去,我使用过redgate的ANTS性能分析器。这真的很好,它对我很有用。我知道不是每个人都想在这些类型的工具上花钱,但这个可能是值得的。看看,他们有一个免费的14天试用版,你可以在这个网站上使用,找出问题所在。

http://www.red-gate.com/products/ants_performance_profiler/index.htm

祝你好运!

答案 3 :(得分:3)

您是否尝试过打开页面跟踪的简单技巧,看看它是否告诉您任何内容?您的aspx页面中的第一行将如下所示:

<%@ Page Language="C#" Trace="true" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SilverlightApplication1.Web._Default"  %>

当页面在浏览器中呈现时,一大堆信息也将附加到其底部。

答案 4 :(得分:2)

分析和跟踪都是很好的建议。

如果您使用DateTime.Now.ToString()建议,我建议您使用System.Diagnostics.StopWatch类。它使用起来非常简单,我发现它更准确。

using System.Diagnostics;
//...
Stopwatch watch = new Stopwatch();
watch.Start();
// Do your loading work here
watch.Stop();
// You can use watch.ElapsedMilliseconds to get the elapsed time

答案 5 :(得分:-1)

将时间写入日志文件并检查。

namespace TracePageLoad
{
    public partial class _Default : System.Web.UI.Page
    {
        string sLogDir = "Your path to write the log";
        protected void Page_Load(object sender, EventArgs e)
        {
            TextWriter objTW = new StreamWriter(sLogDir, true);
            objTW.WriteLine(DateTime.Now.ToString());
            //Your code 
            objTW.WriteLine(DateTime.Now.ToString());
            objTW.Close();
        }
    }
}