日期:2014-05-17  浏览次数:20753 次

请教一段代码的优化
这样子的 ,我sql查询取得了一个datatable。但是有链各个列是数据库里没有的,需要我自己添加
C# code

DataTable dt = DBHelper.GetDataTable(sql);
            //添加列名
            DataColumn dc = new DataColumn();
            dc.ColumnName = "月用电量";
            DataColumn dc2 = new DataColumn();
            dc2.ColumnName = "年用电量";
            dt.Columns.Add(dc);
            dt.Columns.Add(dc2);
            DataTable dt2 = null;
            DataTable dt3 = null;
            string times, msql;
            DateTime timess;
            for (int m = 0; m < dt.Rows.Count; m++)
            {
                times = dt.Rows[m]["Datatime"].ToString(); //记录时间
                timess = Convert.ToDateTime(times);
                msql = "select sum(ElectricityConsumption) as 月用电量 From OF_Node_Report_Elec  where NodeID = "+dt.Rows[m]["NodeID"].ToString()+" and Datatime <= '" + times + "' and Datatime >= '" + timess.Year + "/" + timess.Month + "/01'";
                dt2 = DBHelper.GetDataTable(msql);
                dt.Rows[m]["月用电量"] = dt2.Rows[0]["月用电量"];
                msql = "select sum(ElectricityConsumption) as 年用电量 From OF_Node_Report_Elec where NodeID = " + dt.Rows[m]["NodeID"].ToString() + " and Datatime <= '" + times + "' and Datatime >= '" + timess.Year + "/01/01'";
                dt3 = DBHelper.GetDataTable(msql);
                dt.Rows[m]["年用电量"] = dt3.Rows[0]["年用电量"];
                dt2.Clear();
                dt3.Clear();
            }


可是执行的非常慢,请帮忙指点下问题出在什么地方了啊!JIJIJI!!!

------解决方案--------------------
你这样每次都要在代码中链接各个列表的效率是极低且极慢的,多用户访问更是如此. 
因为.net的缓存机制对数据库的此类操作基本无力,所以速度很慢.
我建议你使用数据库视图,直接在数据库里面建立好视图,然后此处直接访问视图就可以了.
另外建议你多使用下三层架构.
------解决方案--------------------
1.采用存储过程
2.sql语句采用多表连接查询,将数据一次性取出来
------解决方案--------------------
直接用左连接一次查询。你这循环一次查一次,性能太差了。