我有這段代碼看起來雖然是所有聯繫人,並且對發送給他們的每封電子郵件進行計數,如果他們沒有打開/點擊最後一個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
您需要加入查詢。 –