Announcement

Collapse
No announcement yet.

ADO.NET + Pooling?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADO.NET + Pooling?

    Ich habe gelesen, dass ADO.NET automatisch Datenbank - Pooling realisiert.

    Ich verstehe das so, dass wenn ein Programm mit Datenbankzugriff gestartet wird, .Net eine Verbindung zum DB-Server aufbaut, diese Verbindung nach Beenden dieses Programmes eine Zeit lang am Leben läßt und dem gleichen Programm bei erneutem Starten wieder zur Verfügung stellt.
    (Gar nicht einleuchten will mir das bei 2 Schicht, wenn das Programm auf verschiedenen Rechnern gestartet wird.)

    Wenn's so ist - wie machen die das?

    Wenn's nicht so ist - ich kann's mir eigentlich nur bei 3 Schicht vorstellen - wie macht man in .net 3 Schicht - Programmierung analog Borlands Midas?

    Dank im voraus

  • #2
    Hallo,

    du meinst bestimmt "Connection Pooling". Dies ist ein Pool mit Datenbankverbindungen, der immer pro Anwendung/Rechner angelegt wird. Es macht also kaum ein Unterschied, wenn du in deiner Anwendung für jede Abfrage mit eine Verbindung öffnest und wieder schließt. Die physische Verbindung bleibt bestehen - dafür sorgt .NET.

    Verwaltet wird der Pool anhand des connection-strings. Nur wenn dieser identisch ist (wirklich Zeichengenau) kommt es in den Pool. Ansonsten wird ein neuer Pool eröffnet.

    Je nach dem wie viele Clients im Umlauf sind, kann der zentrale Datenbankzugriff über einen Application-Server sinnvoller sein. Effektiv werden dann weniger Datenbankverbindungen benötigt, als wenn jeder Client das selber machen würde

    Comment


    • #3
      Was genau heißt "dafür sorgt .net"?

      Geht das nur mit MS SQL oder allen DBs?

      Kann ich die Pools und die Verwendung sehen

      Comment


      • #4
        Hallo,

        >.."dafür sorgt .net".

        Bereits zu Zeiten von ADO (MDAC) hat OLE DB die Datenbankverbindungen auf dem Client-Rechner in der Voreinstellung <b>automatisch</b> über einen Pool laufen lassen. Sowohl in ADO als auch in ADO.NET kann man den Pool abschalten bzw. die minimale/maximale Poolgröße ändern. Bei einer gepoolten Datenbankverbindung sorgt der Provider (OLEDB bei ADO, ADO.NET bei .NET) dafür, dass die Datenbankverbindung für einen gewissen Zeitraum offen bleibt (d.h. die Datenbank bekommt vom ständigen Connect/Disconnect durch die Clients nichts mit). Dabei sorgt der Pool automatisch auch dafür, dass bei Bedarf der Session-Kontext zurückgesetzt wird, so dass es für den Client nur Vorteile (Performance) bringt.

        &gt;Geht das nur mit MS SQL oder allen DBs?

        Das ist eine Frage der verwendeten Provider. Bei den Klassen SqlConnection und OledbConnection ist der Pool verfügbar, bei fremden Providern (wie Borland's BDP.NET) oftmals nicht.

        &gt;Kann ich die Pools und die Verwendung
        sehen?

        Selbstverständlich, das geht sowohl bei ADO als auch bei ADO.NET über die <b>Leistungsanzeige</b> von Windows. Man kann sich dort verschiedene Leistungsindikatoren einrichten. Bei der Installtion vom .NET Framework werden zum Beispiel gleich 4 neue Leistungsindikatoren für den ADO.NET-Pool (Klassen SqlConnection und OledbConnection) eingerichtet.

        &gt;Gar nicht einleuchten will mir das bei 2 Schicht...

        Auch bei einer klassischen Client/Server-Anwendung (Windows Form auf dem Client-Rechner) macht es Sinn, denn auch hier sollte SqlConnection und OleDbConnection jeweils nur kurzzeitig aktiv sein. In diesem Fall sorgt das ständige "Öffnen und Schließen" der Datenbankverbindung durch das Programm nur dann für <b>keine</b> Performanceverschlechterung, wenn auch in diesem Umfeld ein Pool läuft.
        &#10

        Comment


        • #5
          Hab's glaube ich so weit kapiert - vielen Dank.

          Habe versucht, die Pooling - Vorgänge in der Leistungsanzeige zu finden. Das einzige Datenobjekt das so ähnlich aussieht ist .NET CLR DATA. ADO.NET taucht bei mir nicht auf - sollte es?

          Mit welchem Werkzeug kann man das Pooling konfigurieren?

          Gibt es eine Anleitung wie man 3 Schicht in .net analog zu Midas zu programmieren kann?
          Ich habe die Sache mit den WebServices angeguckt - der Aufwand (WebServer dafür) ist mir zu groß. Also läuft es sicher auf DCOM raus... Ich finde aber nix, das so aussieht wie ein "externes Datenmodul"...

          Dank im vorau

          Comment


          • #6
            Hallo,

            der Eintrag <i>.NET CLR Data</i> bzw. <i>SQLServer: Allgemeine Statistik | Benutzerverbindungen</i> ist schon richtig. Bei anderen SQL-Servern muss man deren Einträge (wenn die denn auch eine Leistungsanzeige unterstützen) suchen.

            &gt;Mit welchem Werkzeug kann man das Pooling konfigurieren?

            Mit einem Editor der eigenen Wahl, denn dies wird über die Verbindungzeichenfolge konfiguriert:

            I. Datenbankverbindungs-Pool deaktivieren : <br>
            a) SqlConnection: ConnectionString erweitern: <b>Pooling=False</b> <br>
            b) OleDbConnection: ConnectionString erweitern: <b>OLE DB Services=-1;</b>

            II. Poolgröße konfigurieren:<br>
            a) SqlConnection: ConnectionString erweitern: <b>Min Pool Size=10;Max Pool Size=40</b&gt

            Comment


            • #7
              Danke.

              Gibt's einen guten Fahrplan um mit .Net 3 Schicht analog zu Midas zu programmieren?

              Ich finde nur Beispiele mit WebServices. Ich möchte aber nicht extra nen Web-Server aufbauen und verwalten.

              Danke

              Mik

              Comment


              • #8
                Hallo,

                &gt;Gibt's einen guten Fahrplan um mit .Net <br>
                &gt;3 Schicht analog zu Midas zu programmieren?

                ja, wobei je nach konkretem Einsatzfall dafür 3 Basistechnologien genutzt werden können: <br>
                1. .NET Enterprise Services <br>
                2. .NET Remoting <br>
                3. ASP.NET XML Web Services

                Der Weg über die Web Services ist der einfachste (betrachtet vom Entwicklungsaufwand), der auch problemlos im Internet funktioniert. Immer dann, wenn man die Vorteile von COM+ voll ausschöpfen möchte, ist .NET Enterprise Services die erste Wahl, dann in der Regel aber nur auf das LAN/WAN beschränkt.

                Über alle 3 Wege kann eine "lebende" DataSet-Instanz zwischen Server und Client in beiden Richtungen transportiert werden, es gibt somit bei diesem Aspekt keine prinzipiellen Unterschiede zwischen 1-, 2- oder 3-Tier (das DataSet arbeitet immer im Offline-Modus)

                Comment

                Working...
                X