2009-05-19 18 views
2

Guten Morgen!Speicherverbrauch von EF

Eigentlich mit EF Ich spiele um atm ein wenig und ich brauche Ihre Hilfe Jungs:
Folgendes Szenario: Ich habe eine Tabelle mit einer Menge von Daten enthalten. Wenn ich diese Tabelle über EF abfrage, werden alle Datensätze in den Speicher geladen.

z.

var counter = default(int); 
using (var myEntities = new MyEntities()) 
{ 
    foreach (var record in myEntities.MySpecialTable) 
    { 
     counter++; 
    } 
} 

Also, ich durchlaufen alle Datensätze von MySpecialTable und counter up zählen. Wenn ich mir den Taskmanager ansehe oder irgendetwas anderes, das mir den Speicherverbrauch meiner App zeigt, sagt er mir: 400Mb. (wegen der Daten)
Wenn ich die Tabelle ein anderes Mal durchlaufe, wird der Speicherverbrauch verdoppelt.

Ich habe bereits versucht, den GC anzurufen, aber es wird nicht funktionieren.

Warum werden alle Datensätze jedes Laufs irgendwo im Speicher gespeichert (und nicht freigegeben)? Wo werden sie gespeichert? Gibt es eine Möglichkeit, EF-Abfragen wie ein DataReader zu verhalten? Oder gibt es ein anderes ORM, das so elegant ist wie EF?

edit:
nein, ich mache keine Zählung so ... das ist nur für die Iteration zeigt :)

Antwort

1

Zunächst einmal, ich hoffe, du bist nicht wirklich ein tun Zähle so; Die Count-Methode ist viel effizienter. Aber angenommen, dies ist nur Demo-Code, um das Speicherproblem anzuzeigen:

Change the MergeOption property of the ObjectQuery to NoTracking. Dies teilt dem Entity Framework mit, dass Sie nicht die Absicht haben, die Entitäten zu ändern, und daher müssen Sie nicht den Überblick über ihren ursprünglichen Zustand behalten.

+1

arbeitete wie Charme! vielen Dank! –