ASP.NET 页面加载时间问题

问题描述 投票:0回答:3

我需要测量页面完全加载所需的总时间,从单击菜单按钮到完全呈现。我通过使用

BeginRequest
EndRequest
事件做到了这一点。由于有些数字太大,我开始测量加载时页面执行的每个方法和事件的时间。我使用秒表对
Preinit
Init
Load
等页面生命周期中的所有事件以及我创建的所有其他方法进行了计时。令我惊讶的是,添加这些数字我什至没有接近使用开始/结束请求得到的数字。与我从每个事件/方法中获得的 2 秒相比,最后一个甚至是两倍、三倍,例如 7 秒。

所以我想知道,这些额外的时间从哪里来?在调试窗口中显示的计时之间,我可以看到各种“正在加载 jhfggdfaasdf.dll”,可能是一些临时文件。这个dll加载需要这个时间吗?

我注意到,我的时间有时会匹配,所以也许有一些缓存机制,但我需要更有经验的人的确认。

asp.net lifecycle
3个回答
2
投票

编辑:再次阅读您的问题,您可能正在使用 asp.net 网站解决方案类型。当您调试时,并且第一次请求页面时,它不会将其编译为 asp.net 目录中的类。然后,该类的 dll 会被加载到应用程序域中,并使用一个有趣的名称(如您提到的那样)。当您第一次请求其中一个页面时会发生这种情况,当您想要部署时,您可以预编译您的网站以提高性能。

如果您看到“正在加载 xyz.dll”,则意味着应用程序域正在加载应用程序使用的内容。当您需要运行尚未加载到应用程序域中的所需 dll(在您的情况下可能是第三方库)中的代码时,就会发生这种情况。这很好,因为它意味着一个页面使用了一个库但从未被调用过,也从未将该程序集加载到内存中。您可以通过在应用程序启动时将 bin 中的所有程序集预加载到应用程序域中,将此命中从首页请求移至应用程序加载。这是内存使用与请求速度之间的权衡。这个问题是一个很好的起点:

如何预加载 AppDomain 的所有已部署程序集

通过使用 ASP.NET 中的跟踪功能,您可以很好地了解页面生命周期时间。这可以在 web.config 文件中设置,如本文所述:

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

查看trace.axd页面将告诉您各种服务器事件的时间,并让您很容易地看到哪里慢了。

如果页面仍然需要很长时间才能呈现,则存在客户端考虑因素,例如

  • 您的页面很大吗
  • 在编写所有 html 和 css 之前,你是否在解释 javascript
  • 你的网速慢吗
  • 您发送了很多 css 和 js 文件吗?大多数浏览器都会限制并发资源下载的数量。也许可以考虑将几个 css 文件合并为一个,至少在您的生产环境中
  • 您是否正在使用客户端缓存。您可以告诉浏览器将某些内容缓存一段时间。如果您的内容需要更新,有多种方法可以使该缓存失效。

这可以使用客户端工具(例如 firebug 或 chrome 中的开发人员工具)进行调试。


0
投票

秒表本身实际上是一个相当笨重的物体。您实际上可能通过使用它来记录时间来增加加载时间。稍微更有效的方法是使用简单的日期时间比较。

protected void Pre_Init(object sender, EventArgs e)
    DateTime started = DateTime.Now;

    // .... some code

    lblDisplayComment.Text = DateTime.Now.Subtract(started).TotalMilliseconds.ToString();
}

这将为您提供仅执行该方法所需的时间(以毫秒为单位)。


0
投票

我认为最简单的方法是打开页面跟踪标志。在这里查看我的答案:https://stackoverflow.com/a/77163155/169149

© www.soinside.com 2019 - 2024. All rights reserved.