0

我有一个 .aspx 屏幕,它在 asp:GridView 组件中显示一些数据。页面加载时最多可以返回大约 30k 条记录。从数据库中检索 13000 条记录需要大约 30 秒。这是慢还是快?我正在使用存储过程从数据库中检索记录,我只查询数据库一次并存储它。那么有一个 foreach 循环需要超过 2 分钟才能执行?所以加载页面需要 aapr 4 分钟。

我只是 asp.net 的初学者。你能帮我改善页面加载时的延迟吗?

这是循环结构..我们可以以任何方式优化它吗?

List auditList = retrievedatafromdatabase();//该方法从数据库返回记录

               foreach (Entity obj in auditList)
                {

                    obj.CultSpecificRevisedData = "NULL";
                    obj.CultSpecificPublishedData = "NULL";

                    if (obj.RevisedData != null && obj.RevisedData != "NULL")
                        obj.CultSpecificRevisedData = ConvertToProfileSpecificFormat(Convert.ToDecimal(obj.RevisedData), DecimalSeparator);
                    if (obj.PublishedData != null && obj.PublishedData != "NULL")
                        obj.CultSpecificPublishedData = ConvertToProfileSpecificFormat(Convert.ToDecimal(obj.PublishedData), DecimalSeparator);

                    var yearPart = obj.CalendarYear;
                    var monthPart = string.Empty;
                    var frequencyName = GetEnglishFrequencyBame(frequencyTypeMasId);
                    if (frequencyName == FrequencyType.Monthly)
                    {
                        monthPart = new DateTime(obj.CalendarYear, GetMonthNumber(obj.Month), 1).ToString("MMM");
                        obj.CultSpecificPeriod = monthPart + "-" + yearPart.ToString();
                    }
                    if (frequencyName == FrequencyType.Quarterly)
                    {
                      UserMessage = obj.QuarterName;
                        obj.CultSpecificPeriod = UserMessage + "-" + yearPart.ToString();
                    }
                    else if (frequencyName == FrequencyType.BiAnnually)
                    {
                        UserMessage = obj.SemesterName;
                        obj.CultSpecificPeriod = UserMessage + "-" + yearPart.ToString();
                    }
                    else
                    {
                        obj.CultSpecificPeriod = yearPart.ToString();
                    }


                }
4

2 回答 2

2

分页是您的第一选择。

但是您应该考虑以下几点:您真的需要 30K 记录吗?用户通常不会浏览前 10\20 条记录,尝试只返回前 100\1000 条记录,并提供良好的搜索和过滤功能,从而科学地限制结果集。

我遇到了同样的问题,并且我知道用户不需要那么多结果,他们需要一种从这些结果中找到他们想要的东西的好方法。

当然,这可以与分页结合在一起。

如果分页不适合您的解决方案(由于某种原因)您不同意所说的,请发布一些代码,我们将尝试帮助进行性能优化。请记住,有时这是一项非常艰巨的任务。

于 2013-01-31T03:51:53.853 回答
0

我会回应关于不需要 30K 记录的评论。研究表明,人类无法真正在视觉上处理超过 2000 个列表项,如果您显示的数量超过此范围,那么您实际上是在向用户撒谎,鼓励他们对数据产生错误不完整的感觉。

但是如果你坚持这样做,你要做的就是遍历手工设置的记录,使用 Response.Write() 为每一行手动编写 html 并发送到浏览器,然后使用计数器调用Response.Flush() 时不时地。如果您的数据层也支持从数据库中流式传输数据(即:通过数据读取器)而不是将整个结果集加载到 RAM 中,则可以加分。

于 2013-01-31T04:40:32.590 回答