Ogni volta che scrivo un programma del modulo sottostante utilizzando LINQ to SQL, si finisce con un programma che acquisisce sempre più memoria mentre viene eseguito e cade in un heap consumando 2 GB dopo forse come poco più di 25.000 dischi. Finisco sempre per riscriverlo usando ADO.NET. Che cosa sto facendo di sbagliato?Elaborazione di set di dati di grandi dimensioni tramite LINQ
Precisazione: questa domanda non riguarda la velocità di elaborazione; le risposte su come farlo andare più veloce non hanno alcuna rilevanza.
foreach (int i=0; i<some_big_number; i++)
{
using (myDC dc = new myDC()) // my DataContext
{
myRecord record = (from r in dc.myTable where r.Code == i select r).Single();
// do some LINQ queries using various tables from the data context
// and the fields from this 'record'. i carefully avoid referencing
// any other data context than 'dc' in here because I want any cached
// records to get disposed of when 'dc' gets disposed at the end of
// each iteration.
record.someField = newValueJustCalculatedAbove;
dc.SubmitChanges();
}
}
Penso che la risposta a "Cosa sto facendo di sbagliato?" è "Fare la stessa cosa e aspettarsi una risposta diversa". Questo è anche un segno di follia. Solo per i calci prova qualcos'altro. Ad esempio, scrivi il tuo codice di accesso sql in ADO.Net FIRST e salta tutto quel crow di linq. – NotMe
Ma LINQ non è escremento, come suggerisci tu. È la più elegante delle tecnologie e persistere con essa è la mia testimonianza, piuttosto che un segno di follia. – Nestor