ASP.Net-创建性能良好的web应用程序?

ASP.Net-创建性能良好的web应用程序?,.net,asp.net,performance,.net,Asp.net,Performance,我需要创建一个处理大量数据的ASP.Net应用程序,性能非常重要 使用ASP.Net控件(如GridView、RepeatControl、SQLDataSource等)是一个好主意吗?这些元素的设计是为了表现良好,还是我会因为使用预制和易于使用的元素而失去性能 哪一种是处理数据的正确方法?创建业务层并使用业务对象填充表单?或者直接使用数据表和数据集 请给我一些有助于提高性能的提示 就性能而言,最好使用ASP.NET MVC,以避免ViewState产生的页面大小开销 就其本身而言,MVC不会使

我需要创建一个处理大量数据的ASP.Net应用程序,性能非常重要

  • 使用ASP.Net控件(如GridView、RepeatControl、SQLDataSource等)是一个好主意吗?这些元素的设计是为了表现良好,还是我会因为使用预制和易于使用的元素而失去性能

  • 哪一种是处理数据的正确方法?创建业务层并使用业务对象填充表单?或者直接使用数据表和数据集

  • 请给我一些有助于提高性能的提示


就性能而言,最好使用ASP.NET MVC,以避免ViewState产生的页面大小开销

就其本身而言,MVC不会使您的应用程序性能提高,但在挤出最后几毫秒的延迟时,它肯定比ASP.NET WebForms具有更大的灵活性

至于数据交互,您可以使用任意数量的网格控件等(jqGrid、mvcContribGrid、Microsoft MVC网格…),但它们的性能基本相同

一定要从控制器层创建一个单独的业务层(同样,如果使用MVC)。根据您的风格,您可以在业务层或模型类本身中包含验证

尽管在当代MVC应用程序中,实体框架是数据访问的最佳选择,但您应该从“批处理”的角度加以注意。在批量更新/删除方面,EF仍然不是很好

大容量插入应该具有合理的性能,但与XML大容量加载之类的东西相比仍然是微不足道的


如果有必要,可以使用EF,但可以将其与手动执行参数化查询结合使用,这些查询仍然可以使用相同的ObjectContext执行(而不是连接所有普通的旧ADO.NET内容).

我给出的最大建议是首先使用良好的编程实践构建应用程序,然后使用探查器查看应用程序中花费时间最多的是什么。如果你开始尝试让一切尽可能快,你会把所有的时间都浪费在无关紧要的事情上。另一方面,如果您开始使代码具有可维护性并遵循坚实的原则,您会发现只需更改几段代码,就可以轻松地进行重大改进

对你来说,定义你的绩效目标也是很重要的。页面加载“足够快”到了什么程度?努力实现您的性能目标,但不要过分尝试将用户每月只执行一次的操作再减少10毫秒

也就是说,你会发现最大的时间浪费是:

  • 您和用户之间的往返
  • 在您和用户之间发送大量数据
  • 您和数据库之间的往返
  • 从数据库中检索大量数据
  • 以下是一些优化上述项目的一般提示:

  • 使用MVC。这将使在浏览器和服务器之间来回传递最小数量的数据变得更加容易
  • 使用不引人注目的javascript技术,这样您就不必在每个页面上重复使用脚本而浪费字节。将javascript放入可以最小化和缓存的静态.js文件中
  • 使用CSS文件来设置页面样式。将其设置为最小化并缓存
  • 对于图标,请使用jquery ui之类的实用程序,以便只需下载一个图像文件
  • 设置服务器以使用适当的缓存和gzip技术
  • 使用一种架构,使您能够轻松缓存经常需要的数据
  • 在如何访问数据方面要明智。尝试在尽可能少的往返中加载给定请求所需的所有内容,并避免从数据库加载不需要的数据
  • 我基本上同意弗雷在回答中列出的一切

  • 最后要考虑的一个小问题是,下一个版本的实体框架将自动缓存编译的查询,这将使大多数查询更快地完成,而不会对您的部分进行额外的工作。

    - 1:VIEW状态只会导致使用它的开销。例如,您不会将其用于只读网格。同意,但用于打开/关闭ViewState的细粒度控件基本上直到WebForms 4.0才出现,因此……这完全取决于您需要使用的环境和版本。一般来说,删除页面负载中大量的服务器端控件内容仍然是提高原始性能的正确方法,无论是ViewState还是一堆JavaScript将HTML连接到服务器端事件处理程序……对不起,又错了。我有许多.NET 2.0应用程序使用了
    DataGrid
    ,但没有巨大的ViewState。我也很抱歉,因为您继续误解了我的意思。我说的是启用/禁用ViewState的粒度。为每个控件打开/关闭ViewState变得很麻烦,在我看来,在整个页面中默认关闭ViewState并在需要时启用它的功能(最后)是使其易于管理的正确方法。这正在演变成一场宗教辩论,但你仍然必须承认,标准的WebForms应用程序在构建时不需要特别小心,很容易在bloat、ViewState或not中拥有数百Kb的页面。请阅读你所写的内容。您会说,“打开/关闭每个控件的ViewState变得很麻烦”,同时您会说,“使用ASP.NET MVC以避免ViewState产生的页面大小开销”。充其量只能说,“使用MVC避免在某些控件上设置EnableViewState='false'的麻烦”。没有理由发表更强烈的声明。彻底的答复和理由+1提到英孚期货。为什么-1?为什么接近?提供