前一段时间用C#.net做了一个网站:www.pykjxxw.com.cn/index_keji/ (整站的一个部分)
现在感觉该网站浏览起来非常的慢,甚至占用大量CPU资源!(对方服务器是电信的空间,在濮阳),现在我感觉应该与程序有比较大的相关性,首页信息列表模块比较多,信息列表我是以 Repeater控件控制其循环显示的,当然也有用 DataList控件!请大家打开网站看看,帮帮小弟
现在感觉该网站浏览起来非常的慢,甚至占用大量CPU资源!(对方服务器是电信的空间,在濮阳),现在我感觉应该与程序有比较大的相关性,首页信息列表模块比较多,信息列表我是以 Repeater控件控制其循环显示的,当然也有用 DataList控件!请大家打开网站看看,帮帮小弟
解决方案 »
- 在js文件里怎么调用数据库里的数据
- asp:RegularExpressionValidator 不能验证空字符???
- 一个页面动态添加textBox
- 紧急 .NET处理ACCESS数据库问题 在线等
- 如何取嵌套Repeater里面控件的值
- asp.net 2.0 在64位系统上部署的问题
- 做这样的网站要多少钱 ?(http://www.gzjinzhong.com.cn)
- 部署服务器
- 求wrox,清华出版的《ASP.NET1.0 入门经典——C# 编程篇》中文版电子书,100分相送,谢谢!
- 按钮事件的奇怪问题?
- ASP.NET的treeview如何在节点右边显示添加 更新 删除 按钮呢?
- Ajax的Accordion中,添加控件。
除非指定了 UpdateCommand,否则数据源“AccessDataSource1”不支持更新操作。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息: System.NotSupportedException: 除非指定了 UpdateCommand,否则数据源“AccessDataSource1”不支持更新操作。源错误:执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。堆栈跟踪:[NotSupportedException: 除非指定了 UpdateCommand,否则数据源“AccessDataSource1”不支持更新操作。]
System.Web.UI.WebControls.SqlDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) +740
System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values, IDictionary oldValues, DataSourceViewOperationCallback callback) +78
System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow row, Int32 rowIndex, Boolean causesValidation) +1218
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +853
System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +87
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +35
只能给出点建议,希望对你有所帮助
一、取列表的数据,不要全部取出来,尽量只取所要用的数据,比如,界面列表数据,只要5条,就取5条。
二、如果多表连合显示的数据,比如,从A表取部分数据,而又要从B表取出相关信息,则最好建立视图,一次性取出,不要在程序里再次循环逐条取数
三、数据表建立索引
四、数据库缓存开大
五、IIS缓存开大最后,优化你的代码与结构
一、在做这种类型的网站,以速度为主,不要多分层,尽量以简单实用为主,如果可能最好就两层,一个前台(展示),一个后台(数据库连接与业务逻辑),
二、检查循环与递归,判断是否可以去掉或者更优化的写法,这种情况以速度为主,而清晰则放在第二位(可以写代码注释来补全)
晚上看情况会上线的。
对于上面的情况,你可以先查查,千万不要用循环的方式绑定,或使用事件DataBinding与ItemDataBound,如果真有这种需要,最好用数据库的能力(做存储过程,把数据一次性返回然后绑定到界面中去
<asp:Repeater id="repeater_kjdt" runat="server">
<ItemTemplate>
<tr>
<td width="20" height="20">
<div align="center"><img src="images/cunct_ldian.gif" width="4" height="4" /></div>
</td>
<td width="169" height="20">
<a href='<%#"Info.aspx?id=" + DataBinder.Eval(Container.DataItem, "newID")%>' class="bb" title="<%#DataBinder.Eval(Container.DataItem, "Title")%>" target="_blank"><%#GetFirstString(DataBinder.Eval(Container.DataItem, "Title").ToString(),22)%></a>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
后台绑定数据源的方式为:
Page_OnLoad事件中加载:
info_kjdt();事件;public void info_kjdt() //科技动态栏目
{
repeater_kjdt.DataSource = Info("36", "6");
repeater_kjdt.DataBind();
}
public DataTable Info(string typeid, string num)
{
DataTable dt = new DataTable();
SqlParameter[] Parameters = new SqlParameter[2];
Parameters[0] = new SqlParameter("@num", num);
Parameters[1] = new SqlParameter("@typeid", typeid);
dt = SqlHelper.ExecuteDataset(Db.MyStaticConn(), "PY_Optimize", Parameters).Tables[0];
return dt;
}
…………首页相当多的信息模块都是用主种方式来绑定的,是不是因为多次的存取数据库造成网站整体反应很慢的原因呢??我感觉你说的 “最好用数据库的能力(做存储过程,把数据一次性返回然后绑定到界面中去”挺不错的,只是如何一次把所有的需要的数据取出来再让它们各自绑定到对应的信息模块呢?