myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Entwicklung (https://www.mycsharp.de/wbb2/board.php?boardid=3)
-- Datentechnologien (https://www.mycsharp.de/wbb2/board.php?boardid=29)
--- MSSQL Pooling funktioniert nicht bei 10 aufeinanderfolgenden Anfragen (https://www.mycsharp.de/wbb2/thread.php?threadid=122103)


Geschrieben von Thron am 13.08.2019 um 12:49:
  MSSQL Pooling funktioniert nicht bei 10 aufeinanderfolgenden Anfragen
verwendetes Datenbanksystem: MSSQL Express

Hallo habe eine Frage und komme nicht weiter. Soweit ich weiß, wird bei SQL Pooling standardmäßig verwendet, was auch bei dem Test hier im SQL Server Profiler zu sehen ist:

C#-Code:
            SqlConnection con = new SqlConnection(@"Data Source=127.0.0.1,1433;Network Library=DBMSSOCN;Initial Catalog=db1;User=server;Password=12345;");

            // Verbindung 10-mal öffnen und schließen                  


            for (int i = 0; i < 10; i++)
            {
                con.Open();

                con.Close();

                Thread.Sleep(100);
            }


            Console.WriteLine("Feritg!!");
            Console.ReadLine();

Wen ich nun aber z.B. 10 Abfragen hintereinader mache um das Pooling zu testen, öffnet er mir jedesmal eine Verbindung und schließt Diese danach auch wieder (10 mal). Wie wenn es keine Pool gäbe!?

C#-Code:
            SqlConnection con = new SqlConnection(@"Data Source=127.0.0.1,1433;Network Library=DBMSSOCN;Initial Catalog=db1;User=server;Password=1234;");

            // Verbindung 10-mal öffnen und schließen
            SqlCommand command = new SqlCommand("Select * from Benutzer", con);


            for (int i = 0; i < 10; i++)
            {
                con.Open();
                SqlDataReader dataReader = command.ExecuteReader();

                while (dataReader.Read())
                {
                    Console.WriteLine(dataReader.GetValue(1));
                }

                con.Close();
                Thread.Sleep(100);
            }

            Console.WriteLine("Feritg!!");
            Console.ReadLine();

Irgednwie kappiere ich das nicht. Dachte das Pooling genau für solche Fälle da ist!?

Viele Grüße und danke schon im Voraus für die Mühe...

thron


Geschrieben von Abt am 13.08.2019 um 14:15:
 
Dafür ist prinzipiell nicht unbedingt nur der MSSQL verantwortlich, sondern ADO.NET.
ADO.NET empfiehlt hier auch immer eine neue SqlConnection Instanz zu erzeugen, und nicht das gleiche Objekt wieder zu verwenden.
Der Key für den Pool ist nur der Connection String.

Meine Vermutung:
- Im Audit übersiehst Du "Nonpooled" und "Pooled" Eigenschaften der Verbindungen
- Du disposed nirgends SqlDataReader, sodass hier vermutlich noch nen Handle offen ist (allgemein hast Du nirgends ein Dispose). Close() hat noch nie für das Freigeben gereicht; weder bei Readern noch bei Connections.
- Dein Code läuft viel schneller durch als der Connection Pool die Verbindungen verwalten kann
- Irgendein anderer Seiteneffekt


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 08.12.2019 02:30