繁体   English   中英

用户控件在asp.net和Performance中

[英]UserControls in asp.net and Performance

asp.net中的UserControls是否会降低性能。

MasterPage有自己的生命周期页面有自己的生命周期,UserControls有自己的生命周期。

UserControls有助于划分工作负载并且易于维护,但UserControls会降低asp.net应用程序的等级性能吗?

我从未见过它们会降低性能,除非你做了一些愚蠢的事情,比如让每个用户控件负责它自己的数据库查找,然后将它们绑在Repeater或类似的东西中。 如果你使用常识,它们不应该明显降低性能。

但是,如果您正在讨论优化到处理器周期,我猜他们不会因为一切都被编译成MSIL,然后编译到机器代码,所以我猜测编译器可以将其排序并将其处理用户控件与您直接在页面上拥有所有组成控件没有什么不同。
编辑 - 添加

本文争论如何实际提高性能。 有趣。

除了它们的可重用性和灵活性之外,Web用户控件还可以利用ASP.NET缓存引擎来实现所谓的“片段缓存”。基本上,片段缓存允许Web开发人员控制各个控件的HTML缓存。一个页面,包括根据查询字符串,控件属性,浏览器类型甚至自定义字符串设置持续时间和缓存控件的各种版本。 仅缓存部分页面的能力是强大的,因为页面的一部分通常将访问存储在关系数据库中或通过XML Web服务访问的相对静态数据,而同一页面的其他部分操纵动态数据。 对于这些静态部分,创建Web用户控件和设置缓存选项可以大大减少数据库往返次数,从而提高性能。 在大多数情况下,明智地使用ASP.NET缓存是可以实现的单一最大性能改进。

好问题。 我再一次学到了新东西。 谢谢。

不会增加或少于添加到页面的任何其他控件。 请记住,您添加到页面的每个服务器控件都具有相同的生命周期。

当然,这是假设你(或其他一些开发人员)没有做任何事情来使它降低性能(即每个page_load数十亿都不会有助于提高性能)。


编辑

好的,这就是事情。

首先,你要求对答案是“取决于”的问题做出是/否回答。 答案是“它取决于”,因为我不知道用户控件如何在其相关代码中受到折磨。

其次,我将在这里添加更多文字。 基本上我会用大约1000个单词中的四句话重复我所说的内容。 所以....

如果您采用全新的用户控制。 不要在CodeBehind中添加任何代码。 不要在ASPX端丢弃任何服务器控件。

然后,与添加Asp:Button或ASP相比,它对性能的影响没有区别:设计师的标签会影响性能。

要清楚:除非你向用户控件添加内容,否则它对网站性能的影响不会超过任何服务器端控件。

性能会受到“影响”吗? 从技术上讲,是的,但实际上,没有。

这是一个非常重要的区别。 请记住,每个服务器端控件都会对性能产生一点影响。 它们是实例化对象,实例化对象消耗内存和资源。 当然,这种影响可以忽略不计,当你向页面添加数百个控件(服务器或用户)时,我只会将这种微小的影响视为“降级”。

用户控制的使用并不是您需要关注的地方。

您需要关注的是用户控件的实现。

当程序员进入CodeBehind并开始做愚蠢的事情以消耗内存和处理器周期时,事情开始降级。 或者,程序员如何实现用户控制可以提高Web应用程序的性能(正如David 在此处所述 )。


编辑2

问题“一般来说,使用用户控制与不做同样的工作是否合适”并不是你在上面提出的问题。 如果您正在执行的任务会降低性能,那么您的任务是否在用户控件中并不重要。 此外,如果这是一个好主意取决于项目,团队,范围,甚至可能是设计范例。

  • “通常情况下,使用用户控件会降低性能”的答案是“实际上没有”。
  • “总的来说,这是一个好主意”的答案是“它取决于”。
  • “一般来说,在UserControl中的任务是否会更好”的答案是“它取决于”。

如果没有关于您的具体情况(代码库,设计,开发团队,维护团队等)的详细信息,则无法获得更好的答案。

我已经构建了使用用户控件过度杀毒的应用程序,并且会不必要地使应用程序膨胀。 我已经构建了一些应用程序,其中使用用户控件不够精确并且在后端非常努力[我们动态实例化控件,因此我们使用自定义和复合服务器控件而不是用户控件(所有代码,而不是代码+设计器) ]。 我已经构建了用户控件是完美解决方案的应用程序。

但所有这些决定都是由于设计而作出的。

暂无
暂无

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

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