[.NET]PerformanceSqlConnection vs OleDbConnection

Pagina: 1
Acties:

  • elmer25
  • Registratie: Februari 2002
  • Laatst online: 01-12-2021

elmer25

ooit was ik 25

Topicstarter
Binnen ASP.NET kun je op twee manieren connecten met een database: via SqlConnection of via OleDbConnection. De eerste methode werkt echter alleen met MS SQL server, en schijnt dan een stuk sneller te zijn. Maar de code werkt dan niet meer met andere databases.

Mijn vraag is of iemand weet *hoeveel* sneller zo'n SqlConnection is t.o.v. de OleDb variant?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:11
Ja, ik heb er even een boek bijgepakt waar de auteur de Sql-classes en de OleDb-classes op hun performance test.
De auteur heeft een testprogramma'tje geschreven die een miljoen iteraties doet en in die iteratie gaat hij gewoon iedere keer dezelfde column gaan ophalen uit een open datareader object.
Door gebruik te maken van de 'text' indexers deed de OleDB versie er zo'n 3.9 seconden over. Door gebruik te maken van de Sql variant, deed het programma er 3.12 seconden over.

Maar, er zijn natuurlijk wel nog manieren om de databank toegang te optimaliseren. Ipv gebruik te maken van de 'text' indexers, kun je ook de numerieke indexers gebruiken.

Dus ipv:
code:
1
DataReader["veld1"]

kun je ook
code:
1
DataReader[1]

gaan gebruiken, dit werkt aanzienlijk sneller.
(Als het test-programma aangepast wordt naar numerieke indexers, doet de OleDb variant 0.67 seconden over die 1 milj. iteraties en de Sql variant doet er 0.23 seconden over).

Maar de Sql en OleDb database classes hebben ook nog een andere manier om data uit een datareader te halen, nl. functies zoals GetString, GetInt32, ... Deze functies zijn nog sneller natuurlijk omdat er niet meer moet geboxed worden.

Het testprogramma dat gebruik maakt van bovenstaande functies deed er 0.57 seconden over (OleDb variant) om 1 milj. iteraties te doen, en de Sql variant 0.23 seconden (evenveel dus als de gewone numerieke indexers).

https://fgheysels.github.io/


  • elmer25
  • Registratie: Februari 2002
  • Laatst online: 01-12-2021

elmer25

ooit was ik 25

Topicstarter
Dank je, erg hulpzame informatie.

Het performance verschil is kleiner dan ik gedacht had...
Voor de zekerheid zal ik ook nog een testje draaien met mijn eigen database

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:11
Even uw titel een beetje aangepast.

https://fgheysels.github.io/


  • elmer25
  • Registratie: Februari 2002
  • Laatst online: 01-12-2021

elmer25

ooit was ik 25

Topicstarter
Titel inderdaad beter zo :)

Ik heb nog een testje gedaan: snelheidsverschil ligt maximaal rond de 50% in het voordeel van de SqlConnection. Toch wel een aanzienlijk verschil. Dat wordt dus helaas toch dubbel programmeren voor de verschillende connecties :'(

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op maandag 10 juni 2002 16:56 schreef elmer25 het volgende:
Titel inderdaad beter zo :)

Ik heb nog een testje gedaan: snelheidsverschil ligt maximaal rond de 50% in het voordeel van de SqlConnection. Toch wel een aanzienlijk verschil. Dat wordt dus helaas toch dubbel programmeren voor de verschillende connecties :'(
Hoezo, de .NET framework is zo opgezet dat de overstap van OleDB naar SQL en vice versa zo soepel mogelijk gaat (en voor een reden).
Zo geven beiden 'gewone' datasets terug e.d.
Alleen het initialiseren moet je aanpassen.

btw, goed boek he whoami :P

Verwijderd

Je kunt ook middels interfaces werken en dan is je programma provider onafhankelijk.

Je werkt puur met de interface definities en definieert je variabelen middels die interfaces. Je kent dan middels een switch() clause de objects toe aan die variables, dus OF SqlConnection bijvoorbeeld OF OleDBConnection OF de oracle provider OF de MySQL provider...

Dit kun je dan weer in routines stoppen die dat voor je regelen, en zo hou je je code provider independent. :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:11
Op maandag 10 juni 2002 18:46 schreef Orphix het volgende:

btw, goed boek he whoami :P
Dat is het zeker. :)

https://fgheysels.github.io/

Pagina: 1