Har alltid använt mig utav "lager metoden" när jag hämtar data
från min databas och jag måste säga att visst är det smidigt men
jag satt och funderade på en sak.
Håller nämligen på med en ny sida och den kommer att få ganska
så många besökare så jag funderade på om den här metoden
verkligen är så bra.
Säg att jag har en sida som använder denna metoden och jag
skall hämta massa data till denna sida med hjälp av olika sql
frågor, då e ju problemet det att databasen kommer att öppnas
och stängas väldigt mycket (en gång per sql fråga om jag gör så
som jag gör nu). Detta känns ju inte så bra i prestandamässig
synpunkt.
Nån som har någon bra ide på hur amn skulle kunna lösa detta?
Hade ju kunnat ta bort lagrerna helt och lägga allt direkt på
sidorna.
Snabbhet är ju inte alltid det viktigaste, bygger du i lager vinner du i flexabilitet och skalbarhet. Inte för att jag tror att det skulle bli någon prestandaförlust som är märkbar, men som argument för att ha kvar modultänket.
då e ju problemet det att databasen kommer att öppnas
och stängas väldigt mycket (en gång per sql fråga om jag gör så
som jag gör nu). Detta känns ju inte så bra i prestandamässig
synpunkt.
Detta kan bli ett STORT prestandaproblem för dig om du verkligen skapar en ny connection varje gång som du anropa din databas, och det är ju inte speciellt bra. Så varför har ingen tänkt på det?
Givetviss har man gjort detta och man har därför skapat en lösning till just detta problem och det kallas connectionpool. Alltså man skapar några databaskopplingar (brukar var 5) och lägger dessa i en pool.
Dessa ligger bara där skapade och färdiga att användas, så när du skapar en databaskoppling så kollar man i poolen om det finns en ledig koppling och finns det så använder man den. Vilket gör att man slipper prestandaförlusten att skapa en databaskoppling (för det är långsamt). Och när du är färdig med databaskopplingen så läggs den tillbaka i poolen så någon annan kan använda sig av kopplingen.
Detta betyder att man skall hålla sin databaskoppling öpen så KORT tid som möjligt. Alltså ÖPPNA, ANROPA, STÄNG. Det betyder också att det inte är speciellt bra att använda sig av en DataReader om man tänker göra en massa saker med denna data, en DataReader är extremt snabb om man bara presenterar datan i en Repeater eller binder till något objekt.
Skall du däremot gör en massa anrop och checkar på den data som finns i din reader innan du visar den, så skall du istället använda dig av en DataTable. Denna använder en Reader för att fyllas med data, och du kan sedan stäng kopplingen till databasen, och sedan loopa igenom din DataTable och göra alla din checkar och kontroller.
Så kom ihåg att Öppna din databas så sent som möjligt och stäng den så tidigt som möjligt. Det är med andra ord bättre att göra.