我从Linq查询返回一个List,然后我必须用for循环填充其中的值.问题是它太慢了.
var formentries = (from f in db.bNetFormEntries
join s in db.bNetFormStatus on f.StatusID.Value equals s.StatusID into entryStatus
join s2 in db.bNetFormStatus on f.ExternalStatusID.Value equals s2.StatusID into entryStatus2
where f.FormID == formID
orderby f.FormEntryID descending
select new FormEntry
{
FormEntryID = f.FormEntryID,
FormID = f.FormID,
IPAddress = f.IpAddress,
UserAgent = f.UserAgent,
CreatedBy = f.CreatedBy,
CreatedDate = f.CreatedDate,
UpdatedBy = f.UpdatedBy,
UpdatedDate = f.UpdatedDate,
StatusID = f.StatusID,
StatusText = entryStatus.FirstOrDefault().Status,
ExternalStatusID = f.ExternalStatusID,
ExternalStatusText = entryStatus2.FirstOrDefault().Status
}).ToList();
Run Code Online (Sandbox Code Playgroud)
然后我以这种方式使用for:
for(var x=0; x<formentries.Count(); x++)
{
var values = (from e in entryvalues
where e.FormEntryID.Equals(formentries.ElementAt(x).FormEntryID)
select e).ToList<FormEntryValue>();
formentries.ElementAt(x).Values = values;
}
return formentries.ToDictionary(entry => entry.FormEntryID, entry => entry);
Run Code Online (Sandbox Code Playgroud)
但它肯定太慢了.有没有办法让它更快?
这肯定太慢了.有没有办法让它更快?
也许.也许不吧.但这不是正确的问题.正确的问题是:
为什么这么慢?
如果您对第二个问题有答案,那么找出第一个问题的答案要容易得多!如果对第二个问题的答案是"因为数据库在东京而且我在罗马,而且数据包的移动速度不比光速快,这是我不可接受的减速的原因",那么你的方式是你搬到日本的速度越快; 没有多少修复查询将改变光速.
要弄清楚它为何如此慢,请找一个探查器.通过分析器运行代码,并使用它来确定您花费大部分时间的地方.然后看看你是否可以加速那部分.
| 归档时间: |
|
| 查看次数: |
980 次 |
| 最近记录: |