Ich mache ein Programm für eine Universität, die aktive Schüler ergreift und spuckt dann einen Bericht für andere Prozesse aus.Leistungsprobleme beim Ausführen von IQueryable.First()
Eine der wichtigen Funktionen ist es zu sehen, ob ein Student abgeschlossen ist oder nicht.
Wenn ein Student die Hauptfunktion durchläuft, dauert es etwa 5 Sekunden, um den Prozess zu durchlaufen. Ich fand, dass die meiste Zeit, die Teil des Prozesses ist, von einem IQueryable.First()
in dieser Funktion kommt.
public static bool ContinuingEducation(string v)
{
var TERMSSTU = from t in _DB.TERMs
join stu in _DB.STUDENT_TERMS_VIEWs
on t.TERMS_ID equals stu.STTR_TERM
where v == stu.STTR_STUDENT
orderby t.TERM_START_DATE descending
select new { startdate = t.TERM_START_DATE };
var graduation = from a in _DB.ACAD_CREDENTIALs
where v == a.ACAD_PERSON_ID
orderby a.ACAD_COMMENCEMENT_DATE ascending
select a;
if (graduation.Count() > 0 && TERMSSTU.Count() > 0)
{
if (TERMSSTU.First().startdate > graduation.First().ACAD_COMMENCEMENT_DATE) // the problem is here
return true;
}
return false;
}
Ich weiß nicht, warum es so lange hier dauert. Gibt es eine bessere Möglichkeit, diese Funktion zu schreiben, damit sie schneller ist?
Sie führen 4 Abfragen aus. 2 für die Zählung und dann 2 weitere, um die erste Zeile jeder Abfrage zu erhalten. Verwenden Sie stattdessen "FirstOrDefault" und prüfen Sie, ob die Ergebnisse "null" sind, um festzustellen, ob es mehr als einen gibt. – juharr
Haben Sie Ihr Problem Franco gelöst? – mjwills
Ich postete meine Lösung unten –