Entwickler-Ecke
Basistechnologien - Out of Memory exeption
nesh - Di 31.07.12 16:49
Titel: Out of Memory exeption
Hallo Forumsmitglieder,
ich habe folgendes Problem.
Ich möchte 2 Datenbanken/Tabellen abgleichen.
Es handelt sich dabei um 2 Tabellen (Artikelstammdaten) bei denen ich von der Master DB den Bestand in eine andere Tabelle schreiben möchte.
Das Problem welches auftritt ist, dass das Programm nach ca. 40.000 Datensätzen eine exeption wirft. Der Belegte RAM beträgt dann ca. 1,5GB.
Um nicht den ganzen Code zu posten hier mal ein Auszug wie ich das prinzipiell mache:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| List<string[]> Masterdaten = (from mdata in Masterdb select new string[]{mdata.Artikelnummer,mdata.Bestand}).ToList();
foreach(string[] s in Masterdaten) { Slavetabelle Datensatz = Slavetabelle.SingleOrDefault(l=>l.Artikelnummer == s[0]); Datensatz.Bestand = s[1]; Slavetabelle.SubmitChanges(); } |
Das klappt soweit einwandfrei. Warum aber baut sich jedoch der RAM so weit auf bis dann die exeption geworfen wird??
Meine Vermutung ist das die Variable Datensatz intern nicht gelöscht bzw. frei gegeben wird.
Das ist aber nur meine Vermutung.
Habt Ihr eine Idee oder einen Tip oder gar die Lösung für mich?
Ich bedanke mich schon mal für eure Mühe
Moderiert von
Th69: C#-Tags hinzugefügt
nesh - Di 31.07.12 21:56
Hallo und Danke für den Willkommensgruß Th69 :-)
Du hast meinen abend gerettet.
Th69 hat folgendes geschrieben : |
Hallo nesh :welcome:
zuersteinmal fällt mir auf, daß du (zumindestens für den gezeigten Codeausschnitt) unnötigerweise die Daten der Mastertabelle komplett mittels ToList() in den Speicher lädst, anstatt als IEnumerable zu durchlaufen:
|
Du hast absolut recht, das macht keinen Sinn!
C#-Quelltext
1:
| IEnumerable<string[]> Masterdaten = from mdata in Masterdb select new string[]{mdata.Artikelnummer,mdata.Bestand}; |
In dem von dir geposteten Link hat mir folgender Satz geholfen:
If you don't need object tracking set DataContext.ObjectTrackingEnabled to false.
Ich habe das umgesetzt, und die Anwendung bleibt bei konstanten 23MB stehen.
Vielen Dank nochmal
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!