Za każdym razem, gdy piszę program w poniższym formularzu, używając LINQ do SQL, otrzymuję program, który po prostu pobiera coraz więcej pamięci podczas działania i przewraca się w stertach zużywających 2 GB po zaledwie 25 000 rekordów. Zawsze kończę przepisywanie go za pomocą ADO.NET. Co ja robię źle?Przetwarzanie dużych zestawów danych przy użyciu LINQ
Wyjaśnienie: To pytanie nie dotyczy szybkości przetwarzania; odpowiedzi na temat tego, jak przyspieszyć działanie, nie mają żadnego znaczenia.
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();
}
}
Myślę, że odpowiedź na pytanie "Co robię źle?" "Robi to samo i oczekuje innej reakcji." Jest to także oznaką szaleństwa. Tylko dla kopnięć wypróbuj coś innego. Na przykład napisz swój kod dostępu sql w ADO.Net FIRST i po prostu pomiń wszystkie te bzdury linq. – NotMe
Ale LINQ nie jest ekskrementem, jak sugerujesz. Jest to najbardziej elegancka technologia i jej przetrwanie jest moim świadectwem, a nie oznaką szaleństwa. – Nestor