У меня есть этот код, который выглядит как все контакты и рассчитывается на каждое отправленное им письмо, и если они не открывают/не нажимают последнюю сумму 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
Вам нужен запрос Join. –