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,给字段加索引等
其次就是适当用缓存……
当然程序的优化也是应该的