C# 提高页面加载时的性能
我有一个.aspx屏幕,显示asp:GridView组件中的一些数据。页面加载时最多可返回约30k条记录。 从数据库检索13000条记录大约需要30秒。这是慢还是快? am使用存储过程从数据库检索记录n am仅查询数据库一次并存储它。然后 有一个foreach循环需要2分钟以上才能执行? 因此,加载页面需要aapr 4分钟 我只是一个asp.net的初学者。你能帮我改善页面加载延迟吗 这是循环结构。我们可以用任何方式优化它吗 List auditList=retrievedatafromdatabase()//此方法从数据库返回记录C# 提高页面加载时的性能,c#,asp.net,C#,Asp.net,我有一个.aspx屏幕,显示asp:GridView组件中的一些数据。页面加载时最多可返回约30k条记录。 从数据库检索13000条记录大约需要30秒。这是慢还是快? am使用存储过程从数据库检索记录n am仅查询数据库一次并存储它。然后 有一个foreach循环需要2分钟以上才能执行? 因此,加载页面需要aapr 4分钟 我只是一个asp.net的初学者。你能帮我改善页面加载延迟吗 这是循环结构。我们可以用任何方式优化它吗 List auditList=retrievedatafromdata
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();
}
}
分页是您的第一选择 但你应该考虑以下几点: 你真的需要三万张唱片吗? 用户通常不会查看前10\20条记录,尝试只返回前100\1000条记录,并提供良好的搜索和筛选功能,从而科学地限制结果集 我也有同样的问题,我知道用户不需要那么多的结果,他们需要一个好的方法来找到他们想要的结果 当然,这可以与分页合并在一起
如果分页不适合您的解决方案(出于某种原因),您不同意上面所说的,请发布一些代码,我们将尝试帮助您进行性能优化。请记住,有时这是一项非常艰巨的任务 我将回应关于不需要30K记录的评论。研究表明,人类实际上无法在视觉上处理超过2000个列表项的任何内容,如果你显示的内容超过了这一点,你实际上是在欺骗你的用户,鼓励他们对数据有错误或不完整的感觉
但是如果您坚持这样做,您要做的是迭代手动设置的记录,使用Response.Write()手动为每一行编写html并将其发送到浏览器,然后使用计数器不时调用Response.Flush()。如果您的数据层也支持从数据库(即:通过datareader)流式传输数据,而不是将整个结果集加载到RAM中,则会获得额外的积分。。你需要分页数据。。你能给我们看看你目前使用的代码吗?除了分页之外。检索需要30秒还是包括渲染?带网格的Viewstate可能会变得相当大,从而导致页面膨胀。添加了分页。是的,检索数据需要30秒,然后在检索到的数据上运行am RUNNIG foreach循环,这几乎需要2分钟。启用分页。检索完所有记录后,在检索到的数据上运行am RUNNIG foreach循环,这几乎需要2分钟我使用数据网格显示。我已经制定了一个解决方案,比如只返回前100\1000个,并提供良好的搜索和过滤功能,作为一种解决方案,但我的老板想知道是否有改进屏幕/数据查询性能的余地?是否有改进循环或存储过程性能的余地?已启用分页。一旦检索到所有记录,然后在检索到的数据上运行foreach循环,这花费了将近2分钟的时间,然后使用数据网格显示。我的目的与您提到的相同,比如只返回前100\1000,并提供良好的搜索和筛选功能作为解决方案,但我的老板想知道是否有改进屏幕/数据查询性能的余地?是否有改进循环或存储过程性能的余地?显示您的代码以供参考SQL和.NET,我要说的是,性能优化总是有空间的,比如SQL索引和使用LINQ in C#…循环结构。你能帮我解决一下吗?我已经解决了每次迭代中调用的GetEnglishFrequencyBame(frequencyTypeMasId),它并不是每次迭代都需要的,所以退出了循环。现在我可以看到性能的提高。感谢您的宝贵意见……干杯:)