一、减少往返行程(Reduce Round Trips)

使用下面的方法可以减少Web服务器和Browser之间的往返行程:

1、为Browser启用缓存

如果呈现的内容是静态的或变化周期较长,应启用Browser缓存,避免发出冗余的http请求。

2、缓冲页面输出

如果可能,则尽量缓冲页面输出,处理结束后再一次传送到客户端,这可以避免频繁传递小块内容所造成的多次网络交互。由于这种方式在页面处理结束之前客户端无法看到页面内容,因此如果一个页面的尺寸较大的话,可考虑使用Response.Flush方法。该方法强制输出迄今为止在缓冲区中的内容,你应当采用合理的算法控制调用Response.Flush方法的次数。

3、使用Server.Transfer重定向请求

使用Server.Transfer方法重定向请求优于Response.Redirect方法。原因是Response.Redirect会向Broswer回送一个响应头,在响应头中指出重定向的URL,之后Brower使用新的URL重新发出请求。而Server.Transfer方法直接是一个简单的服务端调用,完全没有这些开销!

需要注意Server.Transfer有局限性:第一,它会跳过安全检查;第二,只适用于在同一Web应用内的页面间跳转。

二、避免阻塞和长时间的作业

如果需要运行阻塞或长时间运行的操作,可以考虑使用异步调用的机制,以便Web服务器能够继续处理其它的请求。

1、使用异步方式调用Web服务和远程对象

只要有可能就要避免在请求的处理过程中对Web服务和远程对象的同步调用,因为它占用的是的ASP.NET 线程池中的工作线程,这将直接影响Web服务器响应其它请求的能力。

2、考虑给不需要返回值的Web方法或远程对象的方法添加OneWay属性

这种模式能让Web Server调用之后就立即返回。可根据实际情况决定是否使用这种方法。

3、使用工作队列

将作业提交到服务器上的工作队列中。客户端通过发送请求来轮询作业的执行结果。

三、使用缓存

缓存能在很大程度上决定ASP.NET应用的最终性能。Asp.net支持页面输出缓存和页面部分缓存,并提供Cache API,供应用程序缓存自己的数据。是否使用缓存可考虑下面的要点:

1、识别创建与访问代价较大的数据

2、评估需要缓存数据的易变性

3、评估数据的使用频次

4、 将要缓存数据中易变数据和不变数据分离,只缓存不变数据

5、选择合适的缓存机制(除Asp.net Cache外,Application state和Session state也可以作为缓存使用)

四、多线程

1、避免在请求处理过程中创建线程

在执行请求的过程中创建线程是一种代价较大的操作,会严重影响Web Server的性能。如果后续的操作必须用线程完成,建议通过thread pool来创建/管理线程。

2、不要依赖线程数据槽或线程静态变量

由于执行请求的线程是ASP.NET thread pool中的工作线程,同一个Client的两次请求不一定由相同的线程来处理。

3、避免阻塞处理请求的线程

4、避免异步调用

这和1的情况类似。异步调用会导致创建新的线程,增加服务器的负担。所以,如果没有并发的作业要执行,就不要执行异步调用。

五、系统资源

1、考虑实现资源池以提升性能

2、明确地调用Dispose或Close释放系统资源

3、不要缓存或长时间占用资源池中的资源

4、尽可能晚的申请,尽可能早的释放

六、页面处理

1、尽量减小Page的尺寸

包括缩短控件的名称、CSS的class的名称、去掉无谓空行和空格、禁用不需要的ViewState

2、启用页面输出的缓冲区(Buffer)

如果Buffer的机制被关闭,可以用下面的方法打开。

使用程序打开页面输出缓存:

Response.BufferOutput = true;

使用@Page开关打开页面输出缓冲机制:

使用Web.config或Machine.config配置文件的 节点:

3、利用Page.IsPostBack优化页面输出

4、通过分离页面的不同的内容,来提高缓存效率和减少呈现的时间

5、优化复杂和代价较大的循环

6、合理利用客户端的计算资源,将一些操作转移到客户端进行

七、ViewState

ViewState是Asp.net为服务端控件在页面回传之间跟踪状态信息而设计的一种机制。

1. 关闭ViewState

如果不需要跟踪页面状态,例如页面不会 回传(PostBack)、不需要处理服务端控件事件或者每次页面刷新时都会重新计算控件内容,那么就不需要用ViewState来记录页面状态了。可以对特定的WebControl设置EnableViewState属性,也可以在页面一级设置:

2、在恰当的时间点初始化控件属性

ASP.NET的控件在执行构造函数、初始化的期间设置的属性不会被跟踪变化;而在初始化阶段之后对属性的修改都会被跟踪,并最终记录到IE页面的__VIEWSTATE之中。所以,选择合理的初始化控件属性的执行点,能有效的减小页面尺寸。

3、谨慎选择放到ViewState中的内容

放到ViewState中的内容会被序列化/反序列化,Asp.net为String、Integer、Boolean等基本类型的序列化做了优化,如果Array、ArrayList、HashTable存储的是基本类型效率也较高,但其它类型则需要提供类型转换器(Type Converter),否则将使用代价昂贵的二进制序列化程序。

总结:光有了这些技术方法还不够,还需要将这些方法根据你网站的情况灵活运用,适时调整方法,集中解决重要问题,这有这样网站性能才能得到大幅度的优化。

教你七招提高.NET网站性能相关推荐

  1. linux 更改网络速度,教你一招 提高Linux操作系统网速方法(转)

    教你一招 提高Linux操作系统网速方法(转)[@more@] 学校一个电子教室通过ADSL宽带"猫"上网,系统为RedHat 9.0,但在上网时有些网页打不开,而且网速不快.有同 ...

  2. 6个最好的WordPress图像优化器插件提高WordPress网站性能

    WordPress图像优化器插件, wordpress建站, wordpress教程 提升WordPress网站的性能发生在几个层面,可以做一些事情来优化网站,有很多非常好的图像压缩和优化工具.选择正 ...

  3. 喜欢一个人怎么去表白?教你七招彻底摆脱单身狗

    喜欢一个人怎么去表白?教你七招彻底摆脱单身狗. 如果你喜欢上一个人,该怎样对他表白呢?该怎样表达出你真正的心意呢?你可能想过去表白,可是却不知道该从何说起.其实表白成功与否都无妨,但你要保持一个正确的 ...

  4. 文章如何做伪原创 SEO大神教你几招做原创网站文章的心得

    想要创作出好的文章并被百度所喜欢,就非常需要SEO的优化能力,以及要对文章进行塬创或伪塬创,那么,如何做伪塬创文章?以及如何做好塬创网站文章呢?对此,本文小编就为大家带来了几招做"塬创&qu ...

  5. 教你七招如何找Android 高分辨率手机/平板电脑游戏

    分享Android平板电脑使用心得 这里介绍了软件心得 很多人都入手了Android 手机或者平板电脑 发现自己找到游戏不是不能全屏就是秒退. 估计FC问题困扰很多新手玩家. 这里我传授几招技巧帮助大 ...

  6. 教你10招 提高免疫力

    免疫系统能阻止细菌和病毒进入人体,并帮助病人恢复健康,它与内分泌系统及神经系统密切相关,人们的生活方式和情绪直接影响着免疫功能的发挥.加利福尼亚大学医学院的李·伯克博士在"体现"网 ...

  7. 教你七招与U盘病毒Say Goodbye!(高级篇)

    七种防护手段: 提示:组策略=gpedit.msc 根目录=打开u盘后所在的目录 防护手段1-关闭自动运行 方法:组策略-计算机配置-管理模板-系统-[关闭自动运行],启用 评价:一个常见手段,但是这 ...

  8. 教你50招提升ASP.NET性能(十五):解决性能问题时不要低估UI的价值

    (26)Don't underestimate the value of the UI when tackling performance problems 招数26: 解决性能问题时不要低估UI的价 ...

  9. 教你50招提升ASP.NET性能(二十六):对于开发人员的数据库性能技巧

    Database Performance Tips for Developers 对于开发人员的数据库性能技巧 As a developer you may or may not need to go ...

最新文章

  1. 第3关:单链表循环队列
  2. python重命名文件pycharm_Python中批量修改变量名太费劲?Pycharm中使用重命名一次搞定...
  3. DIV与SPAN之间有什么区别
  4. Redis-RDB持久化设置
  5. linux应用之----进程控制理论
  6. ASP.NET MVC 实现二级域名(泛域名)
  7. mysql数据库中的int类型_MySQL中int(M)和tinyint(M)数值类型中M值的意义
  8. 数据可视化【六】Line Chart Area Chart
  9. CVPR 2020 Oral|效果超群的老照片“复活”算法
  10. qt xml组包_Qt 利用XML文档,写一个程序集合 二
  11. c语言单词的一个字母变换,c语言:输入一行英文字符串,把每个单词第一个字母变为大写,输出修改后的字符串知道...
  12. 中小企业CRM评测-销售管理_任我行
  13. 半导体芯片行业的运作模式(IDM/Fabless/Foundry模式)
  14. 闲谈IPv6-聊聊IPv6端到端分段和MTU探测的问题
  15. [kaggle]泰坦尼克预测(代码解析)
  16. 美国计算机专业gre314,托福89,GRE 314获南加大计算机录取
  17. Java实现 蓝桥杯 算法提高 矩阵翻转
  18. 理想低通滤波器(频率域滤波)
  19. 类似爱美刻 右糖 轻剪辑 捷映 秀展网 秀多多 来画 创视网 传影 影大师 闪剪源码 技术源头 二次开发 提供源码 逗拍 趣推 飞推 美册 搞定视频 简影 剪影 爱字幕 幸福相册 八角星
  20. 腾讯百度阿里,三巨头谁最开放?

热门文章

  1. Sigma Function(LightOJ-1336)
  2. String Problem(HDU-3374)
  3. 理论基础 —— 二叉树 —— 哈夫曼树与哈夫曼编码
  4. 信息学奥赛C++语言:短信计费
  5. 46 SD配置-销售凭证设置-分配状态参数文件到项目类型
  6. 24 CO配置-控制-产品成本控制-成本对象控制-定义订单交货的货物接收评估
  7. mysql索引原理传送门_MySQL索引底层实现原理
  8. vue伸缩效果_Vue2(三)实现子菜单展开收缩,带动画效果实现方法
  9. C++:通过多态实现接口并生成dll和lib文件的小例子
  10. pytorch1.7教程实验——分类器训练