Laden...

Sehr lange Ladezeiten mit EF + MySQL

Erstellt von Akhanto vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.544 Views
A
Akhanto Themenstarter:in
28 Beiträge seit 2012
vor 9 Jahren
Sehr lange Ladezeiten mit EF + MySQL

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

849 Beiträge seit 2006
vor 9 Jahren

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).

A
Akhanto Themenstarter:in
28 Beiträge seit 2012
vor 9 Jahren

Hab zum Test einen Button eingefügt, mit dem ich die IList neu lade und dann das Grid, dauert genau so lange.

16.835 Beiträge seit 2008
vor 9 Jahren

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).

A
Akhanto Themenstarter:in
28 Beiträge seit 2012
vor 9 Jahren

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

A
Akhanto Themenstarter:in
28 Beiträge seit 2012
vor 9 Jahren

Dankeschön!!!
Ich hab's gefunden.

R
228 Beiträge seit 2013
vor 9 Jahren

Vielleicht noch kurz zu Info für die "Nachwelt" wo das Problem lag?

Hilft sonst natürlich keinem anderen 😃

A
Akhanto Themenstarter:in
28 Beiträge seit 2012
vor 9 Jahren

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.