2011-01-15 6 views
0

Ok in diesem Szenario, wenn, wenn ich aus dieser Abfrage auf einmal alle Datensätze bringenasp.net Mvc Linq gehen durch 1 Million Datensätze (proccess Zeit)

var pages=_db.Pages; 

und dann werde ich bis zu einem gewissen Szenario nach verarbeiten

pages.Where(m => m.int_PostStatusId == 2) 

pages.Where(m => m.int_PostStatusId == 3) and so on 

spart es wirklich etwas Bearbeitungszeit? oder nicht (was wirklich zu tun?)

Antwort

3

Es ist wichtig zu wissen, dass dies mit ziemlicher Sicherheit tut nicht bringen „alle Datensätze auf einmal“:

var pages = _db.Pages; 

dies Unter der Annahme, LINQ to SQL oder etwas ähnliches erstellt dies nur eine Abfrage - es tatsächlich nichts aus der Datenbank abruft.

Wenn Sie pages.Where(...) verwenden, die eine neue Abfrage erstellt - erneut, holt es tatsächlich nichts aus der Datenbank, bis Sie beginnen, aus der Abfrage zu lesen (z. B. durch den Aufruf ToList). Daher ist es sehr schwer zu sagen, wie Sie Ihren Code optimieren können - wir wissen nicht, was Sie tun.

Versuchen Sie etwas mit alle die Seiten oder nur mit einer Untergruppe zu tun? Wenn Sie eine Gruppe mit PostStatusId versuchen, schlage ich vor, dass Sie das explizit tun, anstatt mit vielen verschiedenen Filtern zu arbeiten.

+0

ich bilde eine Sitemap – maztt

+0

@mazhar: das fast * genug Informationen nicht * ist es uns, Ihnen Ratschläge geben zu helfen. –

1

Unter der Annahme, dass pages ist eine Datenbank bewusst Linq-Abfrage-Provider dann die effizienteste
Art und Weise unter Verwendung wäre eine einzelne Abfrage zu schreiben, alle Daten, die Sie wollen:

// Create the query 
var pages = 
     _db.Pages.Where(p => p.int_PostStatusId >= 2 && p.int_PostStatusId <= 100); 

// Execute the query 
foreach(var page in pages) 
    ProcessPage(page); 

Diese SQL ein bisschen erzeugen würde dies wie:

select * 
from PAGE_TABLE 
where PostStatusId >=2 and PostStatusId <= 100 
Verwandte Themen