2016-04-15 6 views
0

Ich habe diese Methode, die true oder false basierend darauf zurückgibt, ob eine Website Seiten mit externen Verknüpfungen hat.linq-Abfrage, die zu Leistungsproblemen führt

Die Methode funktioniert. Es ist jedoch unglaublich langsam. Es dauert etwa 5 Sekunden, um 100 Websites mit insgesamt 5000 Seiten zu bearbeiten.

protected bool WebsitesWithExternalLinks(int id) 
    { 
     var website = FetchModel(id); 
     if (website == null) return false; 
    //return true; 
     var externalLinks = website.WebPages 
          .Any(wp => wp.Links != null && 
            wp.Links.ExternalLinks.Any()); 
     return externalLinks; 
    } 

ich aufgezeigt habe die Langsamkeit irgendwo in der Linq-Abfrage auftreten, aber ich bin mir nicht ganz sicher, warum es passiert. Ich habe andere linq-Abfragen, die auf WebSite- und WebSage-Objekten arbeiten, die ziemlich schnell sind.

Ich bin mir nicht sicher, warum dieser so langsam ist.

Gibt es eine Möglichkeit, linq-Abfragen zu beschleunigen oder durch etwas anderes zu ersetzen?

+0

Angenommen, dies fragt eine Datenbank ab, können Sie das Schema der relevanten Tabellen posten? –

Antwort

3

Durch die Aussage ...

var website = FetchModel(id); 

... holen Sie eine website aus der Datenbank. Dann greifen Sie auf website.WebPages zu. Dies lädt alle WebPages dieser website in einer separaten Abfrage (Lazy Loading). Dann sind für jede dieser Seiten ExternalLinks Abfragen in noch mehr separaten Abfragen, bis die erste Seite mit mindestens einer externen Verbindung gefunden wird. Wenn es also viele Seiten mit Null-Links gibt, dauert dies eine beträchtliche Zeit.

Das Mittel ist, es in einer Abfrage zu tun. Direkt mit einem Kontext würde es wie folgt aussehen:

Dies wird eine Abfrage ausführen, die nur einen booleschen Wert zurückgeben.

Ich kann von hier nicht sagen, wie das in Ihre Architektur passt. Es hängt davon ab, wie tief Sie den Kontext vergraben haben und wie viel Freiheit Sie selbst hatten, um die Abfragen zu gestalten, die Sie damit ausführen.

Verwandte Themen