繁体   English   中英

ASP.NET页面性能

[英]ASP.NET Page performance

我们有一个相当复杂的页面,动态加载用户控件(其中一些是嵌套的)。 这是一个非常慢的页面。

动态添加控件是否会增加瓶颈? 如果我们在.NET缓存对象中添加控件而不使用LoadControl(如果它已经存在于缓存中)会有帮助吗?

有关使页面更快的任何其他提示/策略?

我们曾将ASP.Net项目的性能提高了一个数量级。 以下列出了我们尝试的内容:

  • 尽可能将SessionState设置为false或ReadOnly。 请注意,为ASPages,Web服务和应用程序设置会话状态的方法是不同的。
  • 如果可能,在进程中存储会话状态。
  • 尽可能将EnableViewState设置为false。
  • 尽可能使用缓存。
  • 如果您不需要从服务器访问控件,请使用HTML控件而不是服务器端控件。
  • 尽可能避免往返(将数据提交到服务器并重新加载页面)。 请注意,您只需要往返从服务器读取数据或将数据写入服务器。 验证和反馈可以在客户端完成。 使用Page_Load中的IsPostBack属性可避免在回发时重新生成数据。
  • 使用StringBuilder类进行重复串联。
  • 仅在意外情况下使用try / catch块; 不要将它们用作一般控制结构。
  • 尽可能使用早期绑定。 换句话说,避免反思。
  • 避免使用COM等非托管代码。
  • 禁用调试模式以运送应用程序。
  • 使用存储过程进行数据库访问而不是SQL字符串。
  • 使用DataReader类来读取数据而不是DataSet。
  • 尽可能使用限制性最强的类,例如SqlDataReader而不是DbDataReader。

将Trace =“true”添加到@Page指令中,您将能够看到哪些方法花费的时间最长。

如果简单地动态加载控件会导致很大的性能成本,我会感到有些惊讶。 但是,如果有很多控件,并且它们是深层嵌套的,那么ASP.NET有时会很慢地将它们呈现为html。 显然,正如其他人建议的那样进行分析,以确定你的瓶颈究竟在哪里。

对于复杂页面,要检查的一件事是渲染的html的大小。 使用许多服务器控件,页面大小可以惊人地快速爬升到数兆字节。 打开或调整您的http压缩可能是您正在寻找的答案。

调查性能问题的第一步是确定瓶颈:是网络流量(HTTP请求太多?管道中有太多HTML?)还是服务器上绑定的CPU? 或太多的数据库调用?

在许多情况下,页面的大小会导致速度变慢。 如果你在你的页面上包含了很多控件,那么会有很多HTML,所以如果你在最终渲染的产品上做一个查看源并找到20000行HTML / javascript,那么它的减速可能就太多了数据通过网络发送。

我建议使用像YSlow这样的工具来帮助更好地理解最终渲染的产品。

要看的关键项目:

  • 管理视图状态大小
  • 确保隐藏的页面部分设置为.Visible = False(而不仅仅是style =“display:none;”)
  • 集中和整合javascript
  • 最大限度地减少HTTP请求的数量

动态加载用户控件绝对不是性能降低的原因。 通常会阻止ASPX页面性能显着的一件事就是viewstate。 我建议将viewstate从页面中取出[即使你已经在某些控件上启用了它]。

将完整的视图状态存储为服务器上的会话变量,并仅在视图状态字段中传输标识符。 您可以在这里查看完整的文章,文章还提供了性能测量指标。

我怀疑它是动态加载控件的行为,它会减慢它的速度,更多的是每个控件的行为。 他们都打了DB吗? 在尝试优化加载之前,我会看看你是否可以简化控件的性能(缓存数据库调用等)。

我会在页面上做一些分析,看看真正的减速发生在哪里。 通常根据我的经验,我认为可能导致实际减速并不是最慢的地方。 当事情开始变得缓慢时,我发现最好对我的应用程序/页面进行分析,这样就可以让我获得非常好的信息,告诉我哪些方面可以最快速地获得戏剧性的提升。 您可能会发现它有太多的数据库调用,或者用户控件加载,或者您没有考虑过的其他内容。

网页可能表现缓慢的原因有很多。 你真的需要使用性能向导之类的工具来开始确定正在发生的事情。

我们最新的性能问题归结为匿名类型和linq。 由于所有JIT编译都在进行,所以很容易用这两件事来扼杀性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM