Ich bin durch eine kleinere (~ 10 GB) Tabelle mit einem Foreach/IQueryable und LINQ-SQL. sieht ungefähr so aus:Iterieren durch IQueryable mit foreach Ergebnisse in einem nicht genügend Speicher Ausnahme
using (var conn = new DbEntities() { CommandTimeout = 600*100})
{
var dtable = conn.DailyResults.Where(dr => dr.DailyTransactionTypeID == 1);
foreach (var dailyResult in dtable)
{
//Math here, results stored in-memory, but this table is very small.
//At the very least compared to stuff I already have in memory. :)
}
}
Das Visual Studio-Debugger führt eine Out-of-Speicher Ausnahme nach kurzer Zeit auf der Basis der foreach-Schleife. Ich gehe davon aus, dass die Zeilen der dtable nicht geleert werden. Was ist zu tun?
zwischenzuspeichern, was haben Sie bereits im Speicher abgelegt, die größer als 10 GB ist? Meinst du 10 MB? – msarchet
Ich habe 16 GB Speicher auf diesem Computer, aber mindestens die Hälfte davon wird von Windows Bloat plus SQL-Caches verwendet. Ich konnte 10 GB Speicher nicht speichern, also lief ich davon. Ich bin überrascht, dass IQueryable die gesamte Tabelle abruft ... Ich würde erwarten, dass es eine oder eine kleine Anzahl von Zeilen gleichzeitig holt. – Gleno
Ich bin in der Lage, dies etwas zu umgehen, indem ich das Kompilierungsziel auf x64 anstelle von x86 ändere, was mehr Speicher auf meinem Rechner nutzt. Die Daten, die ich in meiner foreach-Schleife durchforste, sind jedoch nicht riesig, also denke ich, dass die Sachen in der Schleife nicht richtig gesammelt werden. –