Programmering

Hvordan fungerer ADO.Net-forbindelsespooling?

En forbindelse til en database er en ressourceintensiv operation, der typisk består af få trin. Der skal etableres en kommunikationskanal mellem applikationen og databasen, før det første håndtryk med databaseserveren kan ske. Denne kanal kan enten være en sokkel eller et navngivet rør. Når denne forbindelse er oprettet, og det indledende håndtryk med serveren lykkes, forbindes metadata (forbindelsesstrengoplysninger til at oprette forbindelse til databasen), og forbindelsen til databasen godkendes af databaseserveren.

ADO.Net har længe været en af ​​de mest populære rammer for dataadgang. Connection pooling er en funktion i ADO.Net, der giver dig mulighed for at forbedre dataadgangsydelsen i din applikation.

Hvad er forbindelsespooling?

Forbindelse pooling er en strategi, der bruges til at minimere omkostningerne forbundet med at åbne og lukke forbindelser til databasen. Det giver dig mulighed for at genbruge forbindelser i stedet for at oprette nye forbindelser til databasen, når og når de bliver anmodet om det.

En forbindelsespulje indeholder en samling af inaktive, åbne, genanvendelige forbindelser. Pooler administrerer forbindelsespuljen og opretholder et sæt aktive forbindelser for hver given forbindelsesmetadata, forbindelseskonfigurationsoplysninger.

Bemærk, at du kan have flere forbindelsespuljer i det samme applikationsdomæne. Der oprettes en forbindelsespulje pr. Unik forbindelsesstreng, som du bruger til at oprette forbindelse til databasen og ikke pr. Database. Så første gang du opretter forbindelse til en database med en bestemt forbindelsesstreng, oprettes der en ny forbindelsespulje. Når du opretter forbindelse til den samme database med den samme forbindelsesstreng næste gang, oprettes der ingen ny forbindelsespool, snarere genbruges den eksisterende forbindelsespool.

Det skal bemærkes, at når du bruger integreret sikkerhed, oprettes der en forbindelsespulje for hver bruger, der får adgang til klientsystemet, dvs. forbindelserne samles pr. Windows Identity. I denne henseende siger MSDN: "Når en forbindelse først åbnes, oprettes en forbindelsespool baseret på en nøjagtig matchende algoritme, der forbinder puljen med forbindelsesstrengen i forbindelsen. Hver forbindelsespool er tilknyttet en særskilt forbindelsesstreng. Når en ny forbindelse åbnes, og hvis forbindelsesstrengen ikke stemmer overens med en eksisterende pool, oprettes der en ny pool. "

Konfigurerer pooling af forbindelse

Hvordan styrer du forbindelsespoolingadfærd? Nå, du kan administrere forbindelsespuljer ved hjælp af bestemte nøgleord i din forbindelsesstreng. De vigtige inkluderer følgende:

  • ConnectionTimeout - dette bruges til at specificere ventetiden (i sekunder), når der anmodes om en ny databaseforbindelse. Standardværdien er 15.
  • MinPoolSize - dette repræsenterer det mindste antal forbindelser i puljen.
  • MaxPoolSize - dette repræsenterer det maksimale antal forbindelser i puljen. Standardværdien er 100.
  • Pooling - dette styrer, om forbindelsespooling er slået til eller fra og kan have en værdi af true of false. Når dette er indstillet til sandt, hentes den anmodede forbindelse fra den relevante forbindelsespulje.

Følgende kodestykke illustrerer, hvordan forbindelsespuljen kan konfigureres ved hjælp af forbindelsesstreng:

string connectionString = "Datakilde = localhost; Indledende katalog = prøve; Integreret sikkerhed = SSPI; Forbindelsestimeout = 30; Forbindelsestid = 0; Min poolstørrelse = 0; Maks. poolstørrelse = 100; Pooling = sand;";

ved hjælp af (SqlConnection-forbindelse = ny SqlConnection (connectionString))

{

forbindelse. Åbn ();

// Skriv kode her for at udføre CRUD-operationer i prøvedatabasen

}

Du kan overvåge forbindelsespooling-adfærd ved at udføre de sp_who- eller sp_who2-lagrede procedurer i SQL Server. Du kan også bruge SQL Server Profiler eller drage fordel af Performance Counters til at overvåge forbindelsespooling adfærd.

Der er et par potentielle problemer med pooling af forbindelser. Et sådant problem er fragmentering af puljer. Når du arbejder med forbindelsespooling, skal du være opmærksom på poolfragmentering og sikre, at passende foranstaltninger (din arkitektur skal være designet til at håndtere poolfragmenteringsreducerende strategier) vedtages for at undgå poolfragmentering. Bemærk, at poolfragmentering kan forekomme, hvis du bruger integreret sikkerhed, eller endda når din applikation bruger for mange forbindelsespools.

For at sikre, at pooling af forbindelser fungerer effektivt, skal du sikre dig, at du lukker databaseforbindelserne, når de ikke længere er nødvendige. Du bør aldrig kalde metoden Luk eller bortskaffelse på en forbindelsesinstans i Finaliser-metoden. Du bør også lukke transaktionsforekomsterne, inden de relaterede forbindelsesobjekter lukkes eller bortskaffes. Her er en god læsning om dette emne.