首页 > 解决方案 > ASP.NET MVC API 方法非常慢

问题描述

我有一个 sql 存储过程,它返回 926 行,每行有 238 列,该存储过程需要 1 秒才能返回。现在我正在尝试在 ASP.NET MVC 中运行存储过程并在名为 Report 的模型类中返回结果,请参阅我之前的方法,但是它运行此代码并将项目返回到一个永远需要的类中,有时会冻结我的浏览器。我将如何加快这个过程?

public List<KeyValuePair<object, List<Report>>> GetReportTest(string area, int? isAlphabeticalSort)
        {

            List<KeyValuePair<object, List<Report>>> ReportData = new List<KeyValuePair<object, List<Report>>>();

            try
            {
                using (connection = new SqlConnection(connectionString))
                {
                    connection.Open();

                    using (SqlCommand command = new SqlCommand("GetTasks", connection))
                    {
                        command.CommandType = CommandType.StoredProcedure;

                        SqlParameter parameter1 = new SqlParameter(“@area”, SqlDbType.VarChar);
                        parameter1.Value = area;
                        parameter1.Direction = ParameterDirection.Input;
                        command.Parameters.Add(parameter1);

                        SqlParameter parameter2 = new SqlParameter("@isAlphabeticalSort", SqlDbType.Bit);
                        parameter2.Value = isAlphabeticalSort;
                        parameter2.Direction = ParameterDirection.Input;
                        command.Parameters.Add(parameter2);

                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                var model = reader.GetValue(0).ToString();

                                List<Report> report = new List<Report>();

                                for (int i = 1; i < reader.FieldCount; i++)
                                {
                                    RedBlue item = new RedBlue();

                                if (reader.GetName(i).ToString().Contains("Task"))
                                {
                                    item.task = reader.GetValue(i).ToString();

                                    i++;
                                }

                                if (reader.GetName(i).ToString().Contains("BID"))
                                {
                                    item.baselinefinish = reader.GetValue(i).ToString();

                                    i++;

                                }

                                if (reader.GetName(i).ToString().Contains("AID"))
                                {
                                    item.actualenddate = reader.GetValue(i).ToString();

                                    redBlue.Add(item);

                                }

                                if (reader.GetName(i).ToString().Contains("ClosingDate"))
                                {
                                    item.baselinefinish = reader.GetValue(i).ToString();

                                    redBlue.Add(item);
                                }

                                if (reader.GetName(i).ToString().Contains("DaysToClosing"))
                                {
                                    item.baselinefinish = reader.GetValue(i).ToString();

                                    redBlue.Add(item);
                                }

                                if (reader.GetName(i).ToString().Contains("ScheduleVariance"))
                                {
                                    item.baselinefinish = reader.GetValue(i).ToString();

                                    redBlue.Add(item);
                                }

                                if (reader.GetName(i).ToString().Contains("DaysOfConstruction"))
                                {
                                    item.baselinefinish = reader.GetValue(i).ToString();

                                    redBlue.Add(item);
                                }

                                if (reader.GetName(i).ToString().Contains("IDNOTES"))
                                {
                                    item.baselinefinish = reader.GetValue(i).ToString();

                                    redBlue.Add(item);
                                }

                                if (reader.GetName(i).ToString() == "PDIToClose")
                                {
                                    item.baselinefinish = reader.GetValue(i).ToString();

                                    redBlue.Add(item);
                                }
                                }

                                ReportData(new KeyValuePair<object, List<Report>>(model, report));

                            }
                        }
                    }
                }
                return ReportData;
            }
            finally
            {
                connection.Close();
            }
        }

标签: asp.netasp.net-mvcstored-procedures

解决方案


推荐阅读