5

Meine Anwendung hatte Leistungsprobleme, also begann ich, dies von der Wurzel aus zu untersuchen: "Die Verbindung mit der Datenbank".Um eine Oracle Connection zu schließen oder nicht zu schließen?

Die Best Practices sagt: „eine Verbindung öffnen, verwenden Sie es und in der Nähe ist, so bald wie möglich“, aber ich habe nicht den Overhead weiß, dass dies verursacht, so ist die Frage:

1 - "öffnen, verwenden Schließen Sie so schnell wie möglich Verbindungen mit ODP.NET? "

2 - Gibt es einen Weg und wie man Verbindungspooling mit ODP.NET verwendet? Ich überlege, eine Liste zu erstellen, um einige Verbindungszeichenfolgen zu speichern und eine Logik zu erstellen, um die "beste" Verbindung jedes Mal zu wählen, wenn ich brauche. Ist das der beste Weg?

+2

Sprechen Sie über eine Client/Server-Anwendung? Oder eine dreistufige Anwendung? Sind Sie der Meinung, dass Sie die Anwendung profiliert haben und festgestellt haben, dass das Öffnen und Schließen von Datenbankverbindungen ein Engpass ist? Oder vermuten Sie nur, dass die Leistungsprobleme datenbankbezogen sein können? –

+1

Wessen Best Practice ist das? Das Öffnen einer Verbindung zur Datenbank ist eine teure und zeitraubende Operation.Daher ist es am besten, Verbindungen so lange wie möglich offen und in Gebrauch zu halten. – APC

+0

Justin. Ja, es ist eine Asp.Net-Anwendung, also ist es ein Client/Server mit 3 oder 4 Ebenen, die "Open Connection Operation" ist nicht der Flaschenhals, aber ich denke, dass dies zur Leistungsminderung beiträgt (wenn sie nicht korrekt verwendet wird). – Ewerton

Antwort

6

Hier ist ein Dia-Deck enthält Oracle Best Practices empfohlen:

http://www.oracle.com/technetwork/topics/dotnet/ow2011-bp-performance-deploy-dotnet-518050.pdf

Sie automatisch einen Verbindungspool erhalten, wenn Sie einen OracleConnection erstellen. Für die meisten Anwendungen der mittleren Ebene möchten Sie dies nutzen. Sie möchten auch Ihren Pool für eine realistische Auslastung optimieren, indem Sie Leistungsindikatoren in der Registrierung aktivieren.

Weitere Informationen zum Verbindungs-Pooling finden Sie in der ODP.NET-Online-Hilfe. Pool-Einstellungen werden zur Verbindungszeichenfolge hinzugefügt.

Ein weiteres Problem, mit dem OracleConnections viel zu tun haben, ist, dass der Garbage Collector nicht erkennt, wie ressourcenintensiv sie wirklich sind und sie nicht sofort bereinigen. Dies wird durch die Tatsache verstärkt, dass ODP.NET nicht vollständig verwaltet wird und einige Ressourcen daher vor dem Garbage Collector verborgen sind. Daher empfiehlt es sich, alle Oracle ODP.NET-Objekte (einschließlich OracleConnection) zu schließen() und zu dispose(), um deren Bereinigung zu erzwingen.

Diese besondere Problem wird

(ein Beta wird aus kurz) in Oracle vollständig verwalteten Provider gemildert werden

(EDIT: ODP.NET, Managed-Treiber ist jetzt verfügbar.)

Christian Shay

Oracle

1

Das ODP.NET ist ein Datenprovider für ADO.NET. Die beste Vorgehensweise für ADO.Net ist Öffnen, Daten abrufen (in den Speicher), schließen, Daten im Speicher verwenden. Zum Beispiel mit einem OracleDataReader, um Daten in einer DataTable im Speicher zu laden und die Verbindung zu schließen.

[] 's

0

Für eine einzelne Transaktion ist dies am besten, aber für mehrere Transaktionen, bei denen Sie am Ende festschreiben, ist dies möglicherweise nicht die beste Lösung. Sie müssen die Verbindung offen halten, bis die Transaktion festgeschrieben oder zurückgesetzt wurde. Wie bewerkstelligen Sie das und wie überprüfen Sie, ob die Verbindung in diesem Fall noch besteht? (Dh Netzwerkfehler) Es gibt die ConnectionState.Broken-Eigenschaft, die an dieser Stelle nicht funktioniert.

Verwandte Themen