2012-03-29 1 views

Antwort

5

Bis der Müllsammler es aufräumt.

Das bedeutet: Einige unbestimmte Zeit.

Das bedeutet: Tun Sie es nicht, schließen Sie es immer, wenn Sie damit fertig sind.

+0

keine Antwort. Lesen Sie die Frage: Wie lange wird die Verbindung standardmäßig geöffnet bleiben? Kann ich das ändern? – user774411

+1

@Downlalech - eine * unbestimmte * Menge an Zeit - wie Lasse sagt, wird es geschlossen, wenn der GC eintritt, das Timing davon hängt von anderer Speicherbelegung ab. –

+0

@Downlalech Ich denke, es ist eine Antwort. '*** Connection' Klasse implementiert IDisposable, die von GC ausgelöst wird, wenn die Verbindung nicht explizit geschlossen wird und den Gültigkeitsbereich verlässt. Wenn das Verbindungsobjekt nicht außerhalb des Gültigkeitsbereichs liegt, wird es nie geschlossen. – oleksii

1

Die Antwort ist ein bisschen komplizierter. Im Allgemeinen verwendet ADO.NET Pooling. Auf diese Weise wird die Leistung erhöht, da die Notwendigkeit zum Öffnen und Schließen von Verbindungen vermieden wird, was sowohl auf der Client- als auch der Serverseite langsam ist.

Solange was mit Ihrer Verbindung passiert, wird es entsorgt, wenn der GC es sammelt. Nicht-deterministisch. Du kannst es nicht kontrollieren.

Aber die Entsorgung ist nicht dasselbe wie das Schließen der Verbindung, sondern das erneute Verfügbarmachen im Pool.

Sie können Verbindungs-Pooling in Ihrer Verbindungszeichenfolge steuern: Connection Pooling for the .NET Framework Data Provider for SQL Server

Auf diese Weise können Sie die Poolgröße, Lebensdauer usw. steuern

Im C# -Code sie, die beste Praxis für Einweg-Objekte, wie DB Connections, ist es in einem using Block zu erstellen, der Ihr Objekt auch im Falle einer unbehandelten Ausnahme entsorgen wird.

+0

dies klärt einige Dinge, danke. – ren