Menar du då att cacha mha av typ "Cache"-objektet som isf får skickas med vid varje förfrågning mot BL?
Om BL även ska fungera från tex. en Winform, vilket cache-objekt kan man i så fall använda?
Cache objektet som finns i ASP.NET skall du inte använda, och precis som du säger så fungerar det inte speciellt i en WinForm lösning.
MS har gjort ett Cache Application Block som man kan använda. Eller så skriver man ett eget, det är inte speciellt svårt (tror jag har beskrivit det tidigare här i forumet, sök sök sök).
[hittade länken: http://www.webforum.nu/showthread.php?s=&forumid=191&threadid=93714&highlight=cache]
I en O/R Mapper så hämtar och skapar O/R mappern datan till/från databasen. Alltså all databas access sker genom O/R Mappern, typ så här.
BussinessLager -> O/R Mapper -> DAL -> Databas.
Databas -> DAL (som skickar ett DataTable) -> O/R Mappern (som skapar och skickar ett objekt) -> BussinesLagret
Om man då vill ha en cache med så går man så här.
BussinessLager -> O/R Mapper -> Cache.
Cache (skickar objektet) -> O/R Mappern (som skickar vidare objektet) -> Bussineslagret.
Så om det object som du efterfrågar redan finns i cachen så hämtas det därifrån, annars så fortsätter O/R Mappern till DAL:et och hämtar ut data från databasen, skapar objectet och lägger in det i cachen.
Med den lösningen så slipper du fråga databasen igen, samt att du slipper skapa objektet igen eftersom det redan finns i cachen. Det är en riktigt prestandahöjare att använda sig av cachen, den har ju dock en nackdel, den bokstavligen ÄTER Minne.
Har du 1 object som tar upp 1 MB i minne, så tar 1000 av dessa objekt upp 1 GB i ramminne!!!! Så det vill till att man använder WeakReferens när man skapar sin cache.
- M