转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
也谈ASP.NET应用程序性能优化         ★★★★

也谈ASP.NET应用程序性能优化

作者:闵涛 文章来源:闵涛的学习笔记 点击数:4162 更新时间:2009/4/23 10:40:41
40

16

50

19

5-1 数据查询执行时间统计表

有一种解决方法是将复杂查询的查询条件存于Session中。这种方法简洁又轻便,但是也会造成由于频繁查询导致db-server繁忙的局面(50万条记录的查询时间大于15s);理想的解决办法是实现在数据库查询时可进行分页或者说可以按页查询,这时Session中完全可只存放查询条件,因为交互数据量也不大。OracleSQLServer2005中可以比较方便地实现此功能,但SQLServer2000中实现起来比较麻烦,一般都会用存储过程。

考虑到已有系统在实现上并没有考虑大数据量而且也不是每个页面或逻辑都会出现大数据量,所以不应该采用单一的Session管理方案。实际上,我们可以构造具有自适应性的数据访问执行器和Session管理器,动态地去按不同的方式返回和存储执行结果。由于目前系统的Session管理模式为“进程内”(INPROC)模式且由于IIS没有提供平滑的可配置二级(内存/硬盘)缓存介质切换 ,所以可自行构造虚拟存储空间,缓解并发压力。下面是该方案的总体结构图:

5-2 全局Session管理结构图

 

首先,我们来看一下数据访问执行的流程图(图5-3)。

由图5-3可知,我们在执行查询时会设定一个时间阀值,如果在规定时间内执行完毕说明数据量不是很大那么直接将结果集返回给前台;如果超时了,则会返回一个小数据集(比如 Top 1000),然后在后台另辟线程继续查询动作并将最终结果集保存到Session,注意这时的数据集在一般情形下是很大的但也可能由于服务器繁忙造成等待,所以我们会通过Session Manager去动态按适合的方式保存。

5-3 数据访问执行器流程图

 

下面是SessionManager类结构的简单示意图,

5-4 PageSessionManager类结构简单示意图

必须说明这只是一个简单示意图,在具体实现时这个结构会大大丰富。比如,要加上当前Session的保存方式和保存数量等。实现PageSessionManager的目的是为了规范Session的使用尤其是Session数据集变量的使用,我们会根据数据集的大小来自动选择存储方式,下面是存储Session数据集变量的流程图。

5-5 保存数据集变量流程图

可以看到,我们在SessionManager中引入了一种新的存储方式——虚拟存储(Virtual Store)。其目的显然是为了缓解Web-Server内存压力,提高并发度。经检测,这种方式还是比较快的;如果把XML保存到数据库,则在获取XML或读取XML时会发生超时异常。实际上,我们是自行构造了一种进程外Session管理器,那么也自然需要进行Session的清除和失效管理,我们可以在后台运行专门的失效管理进程,具体实现方法可参考下图。

5-6 虚拟存储示意图

另一个问题是虚拟存储文件与Http进程的对应关系如何建立。这并不难,我们只要创建一个GUID存放在同名的实际Session中,虚拟Session的文件名以此GUID为标识即可。

与存储相对应的,在通过SessionManager获取Session值的时候,SessionManager也要自动根据当前存储方式反馈相应结果,其实现过程并不复杂,这里就不赘述了。

总的来说,这套解决方案的特点是提高并发度和保证快速响应,但对某些问题的处理也有不便。比如,查询需要二次加工的记录集时希望一次得到全部数据集(即使很大),这时必须设定相应属性值告诉AdaptiveExecutor,使之按照指定方式执行;还有就是大数据量时,分页控件在查询结束时不能瞬时得到总页数。

 

 


 

6 代码篇

这里的代码级优化是指对具体的代码实现特别是某个业务逻辑的算法的改进。在前言中举的一个例子就属于代码优化。代码优化是深层次的,需要非常熟悉业务逻辑和数据流,所以难度也是最大的。但在除去业务逻辑之后,我们还是可以对编码技巧或者算法结构达成共识的。本篇主要列举一些实际编码过程中基于性能考虑应当掌握的方法和注意点。

 

          不要使用不必要的Session,和ASP中一样,在不必要的时候不要使用Session

          不使用不必要的Server Control

          不使用不必要的ViewState

上一页  [1] [2] [3] [4] [5] [6] [7]  下一页


[C语言系列]NET 中C#的switch语句的语法  [系统软件]托拽Explore中的文件到VB.net的窗口
[系统软件]Boost库在XP+Visual C++.net中的安装  [常用软件]新配色面板:Paint.Net3.0RC1官方下载
[常用软件]用内建的“Net Meeting”聊天  [VB.NET程序]Henry的VB.NET之旅(三)—共享成员
[VB.NET程序]Henry的VB.NET之旅(二)—构造与析构  [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体
[VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET)  [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台