verwendetes Datenbanksystem: EF 6 + MySQL
Hi,
der Versuch, ca. 120 Datensätze mithilfe von EF aus einer MySQL Datenbank abzufragen war leider sehr frustrierend. Es dauert über 15 Sekunden, bis die Abfrage fertig ist.
Ist das ein generelles Problem dieser Kombination oder liegt es eher an der Abfrage?
Ich habe mich an dieses Tutorial gehalten, um das Programm zu erstellen.
Daher dieser Code zur Abfrage:
public virtual IList<T> GetAll(params Expression<Func< T, object >>[] navigationProperties)
{
List<T> list;
using (var context = new ClanDBEntities(Helper.ConnectionStringBuilder.DefaultBuilder()))
{
IQueryable<T> dbQuery = context.Set<T>();
//Apply eager loading
foreach (Expression<Func<T, object>> navigationProperty in navigationProperties)
dbQuery = dbQuery.Include<T, object>(navigationProperty);
list = dbQuery
.AsNoTracking()
.ToList<T>();
}
return list;
}
Die Zeile im Code, die dann hängt ist diese hier:
IList<t_members> memList = businessLayer.GetAllMembers();
Vielen dank schon mal,
Akhanto
Hi,
nur beim ersten mal? EF6 braucht recht lang für die "view generation" zur laufzeit.
Das sollte beim 2. Versuch allerdings gegessen sein. Man die view Generation allerdings auch zur Compilezeit ausführen. (sollte ein haken in den Properties des Models sein).
Hab zum Test einen Button eingefügt, mit dem ich die IList neu lade und dann das Grid, dauert genau so lange.
Nimm nen Profiler zur Hand und schau Dir damit an, was genau die Zeit frisst.
So ist das heiteres Rumraten (wobei ich die massenhafte Reflection hier nicht unproblematisch finde; generell evtl. nicht unbedingt das "beste" Generic Repository-Beispiel).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Anbei ein Screenshot der Abfrage. Das sieht alles ziemlich zeitintensiv aus.
Jemand ne Idee?
Abt hast du ein besseres Beispiel dafür?
Liebe Grüße
Akhanto
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Vielleicht noch kurz zu Info für die "Nachwelt" wo das Problem lag?
Hilft sonst natürlich keinem anderen 😃
Oh ja, natürlich. Auch wenn das Problem letztendlich eine Eigenproduktion war. Vielleicht dient es ja als Lehrbeispiel für Anfänger.
Das Problem lag hier, im Nachhinein wohl extremst ungeschickt gelöst.
public IList<t_members> GetAllMembers()
{
IList<t_members> tempMembersList = _membersRepository.GetAll();
//foreach (t_members m in tempMembersList)
//{
// m.IsTrial = true && GetTrialmemberById(m.P_member_ID) != null;
// if (GetTrialmemberById(m.P_member_ID) != null)
// m.Notes = GetTrialmemberById(m.P_member_ID).note;
//}
return tempMembersList;
}
Genauer gesagt war es die foreach Schleife.
Vielen Dank für die Hilfe, der Leistungstest war mir neu.