首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mvc asp.net c#中提高数据集循环性能

如何在mvc asp.net c#中提高数据集循环性能
EN

Stack Overflow用户
提问于 2017-02-16 18:38:36
回答 1查看 453关注 0票数 2

我使用以下数据集循环在Razor视图页面上显示数据。此时,我的查询只返回100条记录,但当我从控制器调用该函数以在视图页面上显示时,几乎需要6-7秒。

如何提高性能?

提前感谢

代码语言:javascript
复制
private void testreport(Modeltest model)
{
    try
    {           
        System.Data.DataSet ds = null;

        if (string.IsNullOrEmpty(model.cls))
        {
            ds = getRepository.gerreports(model.ddl_1, model.ddl_2, null, null, null); 
        }
        else if (model.cls_idx=="0")
        {
            ds = getRepository.gerreports(model.ddl_1, model.ddl_2, model.ddl_3, null, null);
        }
        else
        {
            ds = getRepository.gerreports(model.ddl_1, model.ddl_2, model.ddl_3, model.cls, null);
        }

        StringBuilder tbl_h = new StringBuilder();
        StringBuilder tbl_m = new StringBuilder();              
        StringBuilder tbl_e = new StringBuilder();
        StringBuilder tbl_a = new StringBuilder();  

        var data = ds.Tables[0];
        foreach (System.Data.DataRow rw in data.Rows)
        {
            var r1 = rw["cls_T"].ToString();  
            var r3 = rw["cls_T_3"].ToString();
            var r15 = rw["cls_set"].ToString();
            var r17 = rw["cls_name"].ToString();
            var r18 = rw["cls_p_name"];
            var r19 = rw["cls_lbl"];
            var r20 = rw["cls_Type"].ToString();
            var r22 = rw["cls_Text"];
            var r23 = rw["cls_qt"].ToString();
            var r23_int = Convert.ToInt32(rw["cls_qt"].ToString());
            var r24 = rw["cls_resps"].ToString();                           

            if (r3 == "sc")
            {
                tbl_h.AppendFormat(@"<table class='table'><thead><tr><th>{0}</th><th>Reports</th><th>Class</th></tr></thead><tbody>", r19);
            }
            else if (r3 == "cmt")
            {
                tbl_h.AppendFormat(@"<table class='table1'><thead><tr><th>{0}</th><th>Reports</th></tr></thead><tbody>", r19);
            }

            if (r20 == "cls_qt" && (r15 == "q_ask" || r15 == "rpt"))
            {
                if (r24 > 0)
                {
                    if (r23_int >= 75)
                    {                       
                        tbl_m.AppendFormat(@"<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>", r22, r24, r23);
                    }
                    else if (r23_int >= 60 && r23_int < 75 )
                    {                       
                        tbl_m.AppendFormat(@"<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>", r22, r24, r23);
                    }
                    else if (r23_int > 0 && r23_int < 50)
                    {
                        tbl_m.AppendFormat(@"<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>", r22, r24, r23);
                    }
                }                       
                else
                {
                    tbl_m.AppendFormat(@"<tr><td>{0}</td><td>&nbsp;</td><td>&nbsp;</td></tr>", r22);
                }
            }
            else if (r20 == "bk" && r17 == "cmt_cat")
            {
                if (r24 > 0 && r24 >= 100)
                {
                    tbl_m.AppendFormat(@"<tr><td><a href='{0}'>{0}</a></td><td>{1}</td></tr>", r18, r24);
                }
                else if (r24 > 0 && r24 < 100)
                {
                    tbl_m.AppendFormat(@"<tr><td><a href='{0}'>{0}</a></td><td>{1}</td></tr>", r18, r24);
                }
                else
                {
                    tbl_m.AppendFormat(@"<tr><td>{0}</td><td>&nbsp;</td></tr>", r18);
                }
            }

            if (r1 == "bfk")
            {
                tbl_e.AppendFormat(@"</tbody></table>");
            }               

            tbl_a.AppendFormat(tbl_h.ToString() + tbl_m.ToString() + tbl_e.ToString());
            tbl_h.Clear();
            tbl_m.Clear();
            tbl_e.Clear();
        }
        ViewBag.mreport = tbl_a.ToString();
    }
    catch (Exception ex)
    {
        throw new ApplicationException("report: ", ex);
    }
}

我的sql execute函数-

代码语言:javascript
复制
private DataSet ExeSet()
{
    string sql = "select * from reportTest('test2017', 'Jan 2017', null, null, null) order by ID"
    try
    {
        DataSet ds = new DataSet();
        using (SqlConnection con = new SqlConnection(GetCon()))
        using (SqlCommand cmd = new SqlCommand(sql, con))
        {
            con.Open();
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            da.Fill(ds);
            return ds;
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex.Message);
        return null;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-02-16 23:36:29

通常,您的性能问题可能是DataSet本身造成的。DataSet意味着能够保持一致的断开连接的数据副本(例如,对于偶尔连接的应用程序)。除非您需要保留一份断开连接的数据副本,或者需要加载您在数据库以外的其他位置保存的数据版本,否则使用IDataReader实现(例如System.Data.SqlClient.SqlDataReader)将会看到更好的性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42271465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档