Frage

Jeder weiß, dass Sie eine Verbindung schließen sollten sofort nach Abschluss der Arbeit.

Durch einen Fehler in meinem Domain-Objektmodell-Design, ich hatte die Verbindung offen für die volle Lebenszyklus Seite verlassen. Im Grunde habe ich eine Just In Time-Eigenschaft, die eine Verbindung auf dem ersten Aufruf öffnet und dann auf Page.Unload (..) es würde prüfen, ob eine DB-Verbindung immer offen war, und schließen Sie es dann, wenn es ist. Da es nur eine Sekunde dauert, habe ich die Meinung habe seine nicht allzu viel anders, als es sofort zu schließen.

Ist das ok? Oder sollte es noch unmittelbar nach jeder Entnahme sofort wieder verschlossen werden?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Es ist nicht ideal, aber ich würde meine Anwendung über sie nicht neu schreiben. Es sei denn, Ihre Seite wird eine große Menge an zeitraubende Arbeit in verschiedenen Verfahren zu tun, die ganze Seite Lebenszyklus sollte schnell auszuführen. In der Praxis bedeutet es kann nur, dass Ihr Verbindungsobjekt einige Millisekunden länger geöffnet ist, als es sonst der Fall gewesen wäre. Das könnte in einigen Szenarien von Bedeutung sein, aber es klingt nicht wie Sie es in Ihrem Fall wäre.

Andere Tipps

Nein, es ist nicht in Ordnung.

Wenn Ihre Anwendung jemals wachsen oder Maßstab müssen, sollten Sie dieses Problem beheben. Indem diese Verbindung öffnen Sie reduzieren Ihre Fähigkeit zu skalieren. Beachten Sie, dass offene Verbindungen beanspruchen Speicherplatz auf dem Server, Speicher auf dem Client, halten Sie das Öffnen von Schlössern, etc.

Was passiert, wenn Sie Seite abstürzt, bevor das Page.Unload Ereignis erreichen? Sie erhalten eine geöffnete Verbindung haben. Für mich ist es besser, immer so schnell wie möglich die Verbindung zu schließen.

Ja, es ist in Ordnung.

, sobald die Verbindung geschlossen wird, wie Sie können ist eine bewährte Methode für seltene Leiden zu verhindern, dass offene Verbindungen, aber wenn Sie sicher sind, dass die Verbindung dicht wird, gibt es nichts einzuwenden.

Jeder anständig ASP.NET app verwendet Connection Pooling heute und ein Pool ist im Grunde eine Reihe von offenen Verbindungen. In Ihrem Fall würde das bedeuten, dass die Verbindung Sie halten auf „besetzt“ zu und kann nicht verwendet werden, kann auch andere Anfragen zu bedienen.

Soweit ich sehe, es wäre ein Skalierbarkeit Problem sein, in Abhängigkeit von der Menge an Zeit, um Ihre Seite zu tun braucht / machen. Wenn Sie nur 100 Benutzer erwarten, wie Sie sagen, dann wahrscheinlich es ist kein Problem -. Es sei denn, es 100 ist erf / s natürlich

Aus technologischer Sicht ist es OK. Soweit ich die meisten Client-Server-Anwendungen (Web- und Nicht-Web), einschließlich der klassischen ASP-Code verwendet zu arbeiten wie das erinnern, beispiels Sie eine Verbindung für die gesamte Seite zu erklären und damit arbeiten.

Seite abstürzt? das ist, was mit und schließlich sind für

, die besagten, im Interesse der DB Leistung (dh Skalierung) * es ist am besten Verbindungen offen zu halten, so kurz wie möglich erlaubt nur, dass Sie nicht wollen, schließen schließen öffnen schließen öffnen öffnen für die schnelle sequentielle und vorhersehbare Arbeit

* Mir wurde gesagt, dies von einem Mentor früh in meiner Karriere, ich muss sagen, ich habe nicht wirklich das selbst getestet, aber es klingt richtig theoretisch

Natürlich können Sie können halten sie offen, aber nein nein. Schließen Sie es nach dem Gebrauch in schließlich blockiert. Ein Fair-Trade-off von „nach jedem Gebrauch“ ist es nach jedem Satz der Verwendung zu schließen, wenn Sie apt sind eine gespeicherte Prozedur ausführen, aktualisieren Sie eine Spalte, dann eine andere Zeile löschen, könnten Sie öffnen / schließen sich um diese drei Operationen, vorausgesetzt, sie sind alle in einem try / catch umhüllter / endlich.

Sie sollten auf jeden Fall halten die Verbindung offen über die gesamte Lebensdauer der Seite, wenn Sie mehrere Abfragen während es tun. Im Allgemeinen ein wiederverwendet Verbindung über viele Seiten, eigentlich.

Ich denke, eine bessere Frage mit viel besser informiert und produktiv Feedback möglicherweise wäre einige Schnipsel das, was du tust (Code) und die Erweiterung auf den Gründen, warum Sie diese Wahl getroffen haben. Es ist sehr wahrscheinlich eine bessere Lösung, die nicht zu halten erfordert die Verbindung offen, so lange, aber zumindest aus pragmatischen Gründen, könnten Sie ein Feedback zu bekommen, ob es lohnt sich Modernisierungen.

In Zukunft wollen Sie auf jeden Fall weg in Ihrem Code-Behind von dem Datenzugriff bewegen.

Ich finde es bequem, die Verbindung offen zu halten, wenn ORM ( Open Session in Ansicht ), so dass nach einem anfänglichen eifrig holen, können andere Daten lazily werden nach Bedarf geladen. Das funktioniert gut, wenn die Seitenreaktionszeiten angemessen sind, um nicht-Verbindungen zu binden an.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top