我正在开发一个测试项目,该项目从DB
读取数据,过滤结果,并将其作为JSON
消息发送回DataTable
。
10-15行数据大约需要5秒钟,所以我想知道这里可能有问题。
我在调试模式下检查了它,并看到以下这些行(过滤IEnum
)花了这么长时间。
var result1 = new
{
draw = Draw,
recordsTotal = persons.Count(),
recordsFiltered = persons.Count(),
data = persons
.Where(p => p.FName.Contains(sSearch, StringComparison.OrdinalIgnoreCase) || p.LName.Contains(sSearch, StringComparison.OrdinalIgnoreCase) || p.Id.ToString().Contains(sSearch, StringComparison.OrdinalIgnoreCase) || p.Email.Contains(sSearch, StringComparison.OrdinalIgnoreCase))
.Select(p => new[] {p.Email,})
.Skip(iDisplayStart)
.Take(iDisplayLength)
};
我删除了搜索部分(“where”)并再次测试,但仍然需要大约4.5秒。
需要大约1-2秒的另一件事是JSON
序列化器:
var serializer = new JavaScriptSerializer();
var json = serializer.Serialize(result1);
context.Response.ContentType = "application/json";
context.Response.Write(json);
如果您知道什么是最佳做法,请提供帮助。
答案 0 :(得分:0)
不知道"人员"我确实会提出以下建议。
var result1 = new
{
draw = Draw,
recordsTotal = persons.Count(),
recordsFiltered = (iDisplayLength - iDisplayStart),
data = persons
.Where(p => InString(p.FName) || InString(p.LName) || InString(p.Id.ToString()) || InString(p.Email))
.Select(p => new { Email = p.Email }) //already a list, does not need to be an array of objects
.Skip(iDisplayStart)
.Take(iDisplayLength)
.ToList() //execute
};
//also consider an extension method
public bool InString(string prop, string search)
{
return prop.Contains(search, StringComparison.OrdinalIgnoreCase)
}