【发布时间】:2018-12-13 18:53:42
【问题描述】:
我有一个大记录列表,我需要遍历每条记录,添加一些过滤器和计算并将其添加到我的另一个列表中。我认为逐条执行会影响性能,因为显示 900 条记录大约需要 12 秒。
我无法确定为什么花费的时间太长。我使用我的 chrome 开发人员工具来确定它在哪里运行缓慢。后来发现loading 0.2s,scripting 3s,rendering 3s,idle 3s,其他2s。
也许我正在使用实体框架,而 DataTables 让它变慢了。或者我的查询可能有问题。以下是我的代码:
public ActionResult Index(int id, string language)
{
var All_Employees = from employee in db.Employees
.Include(x => x.Country).Include(x => x.Status)
where enployee.GenderId == id
select employee ;
var List = new List<EmployeeListViewModel>();
foreach(var Record in All_Employees.ToList()
.OrderByDescending(x=> ParseDate(x.JoiningDate)))
{
EmployeeListViewModel item = new EmployeeListViewModel();
item.Id = Record.Id;
item.Code = Record.Code;
if(Record.CountryId != null)
{
if(language == "en")
{
item.Country = Record.Country.NameE;
}
else
{
item.Country = Record.Country.NameA;
}
}
item.Date = Record.JoiningDate;
int WorkingDays = 0;
if(Record.JoiningDate != null)
{
DateTime Joining= Convert.ToDateTime(ParseDate(Record.Record.JoiningDate));
TimeSpan t = DateTime.Now.Date - Joining;
int Days = int.Parse(t.TotalDays.ToString());
if (Days > 0)
{
WorkingDays = Days;
}
}
item.Days = WorkingDays.ToString();
if (Record.StatusId != null)
{
if (language == "en")
{
item.Status = Record.Status.NameE;
}
else
{
item.Status = Record.Status.NameE;
}
}
List.Add(item);
}
return View(List);
}
另一个原因可能是我正在转换我的日期:
private static DateTime? ParseDate(string dateString)
{
if(dateString != null)
{
return DateTime.ParseExact(dateString, "dd-MM-yyyy", CultureInfo.GetCultureInfo("en-US"), DateTimeStyles.None);
}
else
{
return null;
}
}
由于某些原因,我不想在我的数据库中将日期归档为 DateTime。
在我目前的情况下,提高性能的最佳方法是什么?
【问题讨论】:
-
另一个原因可能是我正在转换我的日期: -- 好吧,验证一下。尝试不进行此转换。
-
@GertArnold 我试过了,但仍然需要大约相同的时间。
-
Addv.sAddRange极不可能对这种数字产生任何明显的影响。你必须一步一步地消除这个,这是只有你能做的事情。这使您的问题相当广泛:“我的代码中有些地方很慢,有什么建议吗? -
亲爱的,感谢您的建议。我正在更改我的问题的标题。你有什么建议吗?
-
好吧,我想告诉你,这种形式的问题在 Stack Overflow 上是题外话因为它太宽泛了。你自己必须一步一步消除这个。
标签: asp.net-mvc performance entity-framework linq