首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

100分求ASP.net的性能有关问题解决方案

2012-02-03 
100分求ASP.net的性能问题解决方案是这样的,一个娱乐类的站点,需要在个人首页里显示出最新的内容,其中包括

100分求ASP.net的性能问题解决方案
是这样的,一个娱乐类的站点,需要在个人首页里显示出最新的内容,其中包括了BLOG、相片、留言、社区发帖等资料。

我现在使用的是通过一个类,逐次去调用相关内容并绑定,我感觉这种效率很差,因此来请教各位前辈效率比较高的解决方案。

以下为调用方式。

用户首页的调用代码:

//绑定好友
dbcon.getUserFriend(userid,   true,   FriendDr);
//绑定相册
dbcon.selectPageList( "photoSubject ",   "subjectid ",   " ",   1,   5,   "picPath,subjectid,subjectName ",   "subjectType   =1   and   userid= "   +   userid.ToString(),   2,   xcDr);
//绑定留言
dbcon.selectPageList( "leavewords   a   left   join   users   b   on   a.userid=b.userid ",   "id ",   " ",   1,   5,   "a.replyCon,a.userid,a.username,a.updateTime,a.content,b.faceURL ",   "memberID= "   +   userid.ToString(),   2,   LeaveWordDr);
//绑定博客文章
dbcon.selectPageList( "blog ",   "logid ",   " ",   1,   4,   "logfile,topic,logtext ",   "ishide=0   and   passcheck=1   and   isDel=0   and   authorid= "   +   userid.ToString(),   2,   BlogDr);
//绑定论坛发帖
dbcon.selectPageList( "bbs ",   "id ",   " ",   1,   4,   "Title,Content,id,boardid ",   "parentid=0   and   boardid   not   in(444,240)   and   userid= "   +   userid.ToString(),   2,   bbsDr);


dbcon里的分页调用程序如下:

//调用通用的分页程序
public   static   void   selectPageList(string   tables,   string   primaryID,   string   sort,   int   currentPage,   int   pageSize,   string   fields,   string   whereStr,   int   SortType,   Repeater   myDr)
        {
                SqlConnection   myCon   =   new   SqlConnection(defConnString);
                SqlCommand   myCmd   =   new   SqlCommand( "SP_Pagination ",   myCon);
                myCmd.CommandType   =   CommandType.StoredProcedure;
                myCmd.Parameters.Add( "@TableName ",   tables);
                myCmd.Parameters.Add( "@FieldList ",   fields);
                myCmd.Parameters.Add( "@PrimaryKey ",   primaryID);
                myCmd.Parameters.Add( "@Where ",   whereStr);
                myCmd.Parameters.Add( "@Order ",   sort);
                myCmd.Parameters.Add( "@SortType ",   SortType);//排序方式。1为按主键asc   2为desc   3为按order参数中的多个参数的排序
                myCmd.Parameters.Add( "@RecorderCount ",   1000);
                myCmd.Parameters.Add( "@PageIndex ",   currentPage);
                myCmd.Parameters.Add( "@PageSize ",   pageSize);
                myCmd.Parameters.Add( "@TotalCount ",   1);
                myCmd.Parameters.Add( "@TotalPageCount ",   1);


                try
                {
                        myCon.Open();
                        myDr.DataSource   =   myCmd.ExecuteReader();
                        myDr.DataBind();
                }
                finally
                {
                        myCon.Dispose();
                }
        }


[解决办法]
性能牵扯到很多方面的问题
比如:
1、你的数据量特别的大,就应该建立索引,然后在存储过程里面实现分页
2、数据库连接及时关闭
3、能用客户端控件就不要使用服务器端空间
4、很多对对象占用空间大,用完以后不要等待垃圾回收机制,直接给他NULL
想到再说
[解决办法]
是不是连接数据库太频繁了,试试只连接一次把所有的事情都做完.
[解决办法]
对于你这个首页,加个数据缓存会改善很多……即使只缓存很短的时间如几秒,因为你首页的流量很大……
[解决办法]
每一个栏目应该做成一个用户控件,在用户控件的设计代码第二行写:

<%@ OutputCache Duration= "60000 "

也就是缓存10个小时左右,然后增加缓存依赖项让数据库变动、Cache中某个数据项变动或者某个数据文件变动时缓存自动刷新。

在开发调试时把这行注释掉,一旦调试完这个用户控件,就去掉注释。
[解决办法]
系统性能问题关系方面众多,每一个动作都考虑一下。
1.数据方面
a.优化SQL
b.建立索引
c.用存储过程
d.及时关闭数据连接
e.及时注消对象
....
2.页面
a.尽量使用客户端控件
b.验证尽量在前台
c.想办法减少与服务器的交互
d.在IIS中将垃圾池回收加上作业
e...
[解决办法]
用户首页也可以用缓存啊,按用户ID来缓存,缓存时间相对短一点就好了。

还有因为用户首页的内容比较多,没必要一次全部读取完所有数据再显示,可以先读取一些重要的信息、常看的信息。比较少看或者不是最重要的信息可以通过AJAX来调用,这样用户就不会觉的打开用户首页会很花时间。

比如blog和社区发帖在page_load的时候就读取,而相片、留言在页面显示的时候用AJAX去调用就好了

[解决办法]
其实优化最先考虑的都是先优化数据库,如果优化SQL,给字段加索引等
其次就是适当用缓存……
当然程序的优化也是应该的

热点排行