我有这段代码看起来虽然是所有联系人,并且对发送给他们的每封电子邮件进行计数,如果他们没有打开/点击最后一个X数量,然后返回它们在列表中我该怎么做才能提高此代码的性能
目前代码需要大约10分钟才能运行,有什么我可以做的改进呢?
我知道我可以限制返回的金额,但仍然很慢。
var contactList =
(from c in db.Contacts
where c.Accounts_CustomerID == Account.AccountID && !c.Deleted && !c.EmailOptOut
select c).ToList();
foreach (var person in contactList)
{
var SentEmails =
(from c in db.Comms_Emails_EmailsSents where c.ContactID == person.ID select c).OrderBy(
x => x.DateSent).Take(Last).ToList();
if (SentEmails.Count == Last)
{
if (!Clicks)
{
if (SentEmails.Count(x => x.Opens == 0) == Last)
{
ReturnContacts.Add(person);
}
}
else
{
if (SentEmails.Count(x => x.Clicks == 0) == Last)
{
ReturnContacts.Add(person);
}
}
}
}
return ReturnContacts;
先让一个性能分析器(例如dotTrace)来指导究竟什么时候缓慢。 – HimBromBeere
您需要加入查询。 –