Jag har nyligen slängt upp min första sida på nätet men jag är inte riktigt nöjd. Tycker att mina kopplingar mot min MySQL-databas tar lite för lång tid... Finns det nåt man ska tänka på för att få snabba kopplingar mot databasen? Är MySQL-databaser slöar än MSSQL?
Jag använder mig av Bytefx dataprovider för att ansluta mig mot min databas... har en connectionsstring som jag öppnar och sen ställer jag en fråga mot databasen kopplar en datareader till den aktuella frågan och när jag är klar så stänger jag ner kopplingen mot databasen... Nu blir jag lite fundersam här.. ska man stänga ner datareadern? Jag kopplar mot databasen på 2 ställen på en sida som jag har... använder samma connectionstring på båda ställena... kan vara att det tar tid på något sätt att stänga och koppla upp igen...
Här är koden för att koppla upp mig mot min databas..
MyC.Open()
Dim MyCommand As New MySqlCommand(SQL, MyC)
Dim dr As MySqlDataReader = MyCommand.ExecuteReader
Do While dr.Read()
do some stuff
Loop
MyC.Close()
Du ska alltid stänga en datareader när du är klar med den. Den håller en konstant öppen stream mot databasen så länge den är öppen...
Vad det gäller ByteFX är dom både bra och snabba så det är inte det som orsakar slöheten.
Det borde inte heller ta någon tid att öppna connection 2 gånger - särskilt inte om det är med samma connectionstring för då använder sig .net automatiskt av connection pooling.
Summa sumarum: Slöheter beror antingen på kodfel eller eventuellt om databasservern är på en annan maskin på nätverket :)
Stängs inte datareadern när jag försvinner ur scoopet? min databas var problemet denna gången i alla fall.. det var bara tillfälligt som den var slö hävdade dom som administrerar mysql-servern... men visst det tillhör ju god programmerings ed att stänga en datareader när man är färdig med den ;-)
Den bör stängas när kopplingen hämtas upp av GC:n, vilket kan dröja ett tag.
Som jag har förstått det så har tyvärr .NET lite problem med referencer till vanliga icke .NET komponenter och du kan alltså råka ut för minnesläckor om man inte explicit stänger sina kopplingar till allt vad databaser heter.
I vilket fall som helst så även om GC skulle stänga den så vet man aldrig när GC körs, det kan ta 1 sekund eller 5 timmar och under tiden så håller man en öppen koppling till databasen vilket minskar skalbarheten för applikationen.
Rekomendationer är finns det en .Close() eller .Dispose() method på ett objekt så skall man ALLTID kalla på den när man är färdig med objektet.