2012-04-01 14 views
0

Ich arbeite an einem .NET 3.5-Projekt und wird ein DataSet mit mehreren DataTables und Beziehungen zwischen den DataTables verwenden. Ich werde eine bestimmte Anzahl von Datensätzen aus SQL abrufen, um die DataTables zu füllen und diese Datensätze dann zu verarbeiten. Nachdem ich die Datensätze verarbeitet habe, möchte ich das DataSet löschen und die nächsten Datensätze abrufen. Ich habe gelesen, dass die Clear() - Methode die Zeilen nicht aus dem Speicher löscht. Wie kann ich das DataSet wiederverwenden, ohne dass mein Speicher während der Dauer des Abrufs von Datensätzen weiter ansteigt?Wiederverwendung des gleichen DataSet ohne Speicherprobleme

+0

Ändern Sie einfach Ihre Auswahlkriterien und rufen Sie erneut Fill auf. Sie müssen sich nur mit dem Dataset herumärgern, wenn sich die Tabellen oder Beziehungen ändern, und dann erstellen Sie einfach ein neues Dataset und übergeben es an Ihre Verarbeitungsfunktionen. –

+0

Mein Anliegen hier ist die Erinnerung. Dieser Prozess wird an vielen tausend Datensätzen arbeiten, die für viele Stunden ausgeführt werden. Ich muss sicherstellen, dass der Speicher ordnungsgemäß verwaltet wird. – user31673

+0

Aber sobald DataRow nicht mehr referenziert wird, sollte der GC es loswerden, Clear oder Fill wird das tun. Sieht für mich wie vorzeitige Optimierung aus, finde heraus, ob dein Anliegen gerechtfertigt ist, eine einfache POC Style-Studie wird das tun. –

Antwort

1

MSDN besagt, dass the DataSet.Clear method clears the DataSet of any data by removing all rows in all tables.. Es wird alle Tabellen und Beziehungen intakt lassen, aber alle Zeilen löschen.

Wo haben Sie sonst gelesen?

+0

Wenn Sie die Antwort von einem Microsoft-Mitarbeiter unter folgendem Link http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataset/thread/41e1b19a-b5ee-4cf2-ac1e-ff0c9a35b961 lesen, werden Sie sehen, dass er Geben Sie Folgendes an: DataSet.Clear() und DataSet.Dispose() werden die Zeilen nicht durch GC gelöscht. Die Methode .Clear() entfernt alle Datenzeilen in jeder Datentabelle innerhalb des Datasets. Außerdem wird die .Dispose() - Methode von der Basisklasse des DataSet MarshalByValueComonent implementiert, sodass die verwalteten Ressourcen des Datasets nicht freigegeben werden. – user31673

+0

Das heißt, Zeilen sind gelöscht, Metadaten (Tabellen Relationen usw. sind nicht), was gut ist, weil es unwahrscheinlich ist, dass Sie es wollen. Wenn die Metadaten unterschiedlich waren, dann führe sie entweder null aus oder weise sie einem neuen zu –

Verwandte Themen