不管怎样,我仍推崇.net,因为.net在程序的可读性,程序架构,程序重用性,扩展性,程序维护性方面以及对OOP的绝对支持大大强于asp,php.而且我相信真正懂.net,的程序员定能发挥.net的无穷威力,好了,废话少说,说说我做站点时遇到的一次优化经历!好让有相同经历的人得到点启发,我就很欣慰了!
<%@ Page MasterPageFile="~/MasterPage.master" %>
<%@ Register Src="~/Control/RecommendFile.ascx" TagName="Recommend" TagPrefix="ED" %>
<%@ Register Src="~/Control/LatelyUpdated.ascx" TagName="Newly" TagPrefix="ED" %>
<%@ Register Src="~/Control/CommonColumn.ascx" TagName="Column" TagPrefix="ED" %>
<%@ OutputCache Duration="40" Location="Any" VaryByParam="*" %>
<asp:Content ContentPlaceHolderID="rightMain" runat="server" ID="content1">
<div id="right">
<div id="new">
<div id="newTitle">
</div>
<div id="newContent">
<ED:Newly ID="newly" runat="server"></ED:Newly>
</div>
</div>
<div id="pictures">
<ED:Recommend ID="r1" runat="server" DisplayNum="2"/>
</div>
<div id="allSoftware">
<div id="allSoftwareTitle">
<img alt="allsoftware" src="images/allsoftware.jpg" />
</div>
<div id="allSoftwareContent">
<div class="softItem">
<ED:Column ID="c1" runat="server" ColumnId="1" />
</div>
<div class="softItem">
<ED:Column ID="Column1" runat="server" ColumnId="2" />
</div>
<div class="softItem">
<ED:Column ID="Column2" runat="server" ColumnId="3" />
</div>
<div class="softItem" style="width: 179px;">
<ED:Column ID="Column3" runat="server" ColumnId="4" />
</div>
<div class="softItem">
<ED:Column ID="Column4" runat="server" ColumnId="5" />
</div>
<div class="softItem">
<ED:Column ID="Column5" runat="server" ColumnId="6" />
</div>
<div class="softItem">
<ED:Column ID="Column6" runat="server" ColumnId="7" />
</div>
<div class="softItem" style="width: 179px;">
<ED:Column ID="Column7" runat="server" ColumnId="8" />
</div>
</div>
</div>
</div>
</asp:Content>
<ED:Column ID="c1" runat="server" ColumnId="1" />
</div>
<div class="softItem">
<ED:Column ID="Column1" runat="server" ColumnId="2" />
</div>
<div class="softItem">
<ED:Column ID="Column2" runat="server" ColumnId="3" />
</div>
<div class="softItem" style="width: 179px;">
<ED:Column ID="Column3" runat="server" ColumnId="4" />
</div>
<div class="softItem">
<ED:Column ID="Column4" runat="server" ColumnId="5" />
</div>
<div class="softItem">
<ED:Column ID="Column5" runat="server" ColumnId="6" />
</div>
<div class="softItem">
<ED:Column ID="Column6" runat="server" ColumnId="7" />
</div>
<div class="softItem" style="width: 179px;">
<ED:Column ID="Column7" runat="server" ColumnId="8" />
</div>
上述代码完全可以整合为一个独立的控件,这样连接数据库的次数将会减少到2次,相比原始的做法连接16次数据库,将会有很大的提高.具体做法是通过查询"栏目表"和"文件表"得到所需数据然后将其格式化为html的字符串,用一控件呈现出来,然后被首页调用.
即:
1.整合控件的后台代码:
public partial class Control_ColumnFile : System.Web.UI.UserControl
{
private Int32 columnNum;
public Int32 ColumnNum
{
set { columnNum = value; }
}
protected String OutPutColumnFileStr()
{
String queryStr = String.Format("select top {0} * from [Column]", columnNum);
IList<Column> clist = Columns.GetColumnList(queryStr);
DataSet ds=Files.GetColumnFile(clist);
StringBuilder sb = new StringBuilder();
for(int i=0;i<clist.Count;i++)
{
sb.AppendFormat("<div class=\"softItem\"></div><div class=\"softItemTitle\">{0}</div><div class=\"softItemContent\"><ul>",clist[i].Name);
for(int j=0;j<ds.Tables[i].Rows.Count;j++)
{
sb.AppendFormat("<li><a href=\"down.aspx?Id={0}\">{1}</a></li>",Convert.ToInt32(ds.Tables[i].Rows[j]["File_ID"]),ds.Tables[i].Rows[j]["File_Name"].ToString());
}
sb.Append("</ul></div>");
}
return sb.ToString();
}
}
2.函数调用
public static DataSet GetColumnFile(IList<Column> clist)
{
DataProvider dp = DataProvider.Instance();
DataSet ds = dp.GetColumnFileDataSet(clist);
return ds;
}
3.根据栏目集合返回所有栏目文件的数据集
public override DataSet GetColumnFileDataSet(IList<Column> clist)
{
DataSet ds = new DataSet();
String basicQueryStr = "select * from [File] where [Column_ID]=";
using (DbConnection conn = new OleDbConnection(ConnString()))
{
using (DbCommand comm = conn.CreateCommand())
{
comm.CommandType = CommandType.Text;
conn.Open();
for (int i = 0;i<clist.Count; i++)
{
String queryStr = basicQueryStr + clist[i].Column_ID.ToString();
comm.CommandText = queryStr;
IDataReader dr = comm.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
ds.Tables.Add(dt);
}
}
}
return ds;
}
这样我们将会在首页得到格式化的HTML字符串,达到同样的显示效果,但是却大大提高了Web应用的效率.
后记:写完这篇真是汗颜,做一个程序员不难,但做一个优秀的程序员却不简单,以前自己总是认为实现功能即可,但是这是远远不够的,真正优秀的程序员,会近乎苛刻的审核自己写的每行代码,不断地优化程序,优化性能,这才是我们所必须学习和追求的.朝优秀的程序员努力!!!加油