2010-05-19 17 views
5

Rozumiem, że każda odświeżana strona, szczególnie w "AjaxLand", powoduje, że moja klasa z tyłu/zza kodu jest wywoływana od zera ... To jest problem, ponieważ mój klasa (która jest obiektem członkowskim w System.Web.UI.Page) zawiera DUŻO danych pochodzących z bazy danych. Więc teraz każde odświeżenie strony w AjaxLand powoduje, że wykonuję duże wywołania backendu DB, a nie tylko ponowne wykorzystanie obiektu klasy z pamięci. Jakieś poprawki do tego? Czy w tym miejscu wchodzą zmienne sesji? Czy zmienne sesji są jedyną opcją, którą muszę zachować obiekt w pamięci połączony z instancją pojedynczego użytkownika i jedną sesją?"Buforowanie" dużej tabeli w ASP.NET

+0

Każde odświeżenie strony spowoduje, że strona zostanie (ponownie) oceniona, niezależnie od tego, czy używana jest AJAX. Twój kod AJAX NIE powinien odświeżać całej strony, powinien ponownie wykorzystywać odpowiednie dane * po stronie klienta * (tj. NIE jako obiekt .NET w pamięci [serwer]). –

Odpowiedz

1

Spójrz na ten MS article na różne mechanizmy buforowania ASP.NET. Istnieje sekcja o nazwie "Pamięć podręczna dowolnych obiektów w pamięci serwera", która może Cię zainteresować.

0

Skoro wspomniałeś Ajax, myślę, że warto wziąć pod uwagę następujące kwestie:

zakładamy to duży zbiór danych jest statyczna i nie przemijające, w pierwszym wywołaniu Ajax, aplikacja wysyła zapytanie do bazy danych, pobiera dużo danych i zwrotów do klienta (np. przeglądarka/JavaScript działający w przeglądarce itp.), klient ma już wszystko to w pamięci. Następnie nie trzeba wracać do serwera dla tych samych danych, które klient już posiada w pamięci. Co musisz zrobić, to użyć JavaScript do przebudowania DOM lub cokolwiek innego. Wszystko można zrobić na kliencie od tego momentu.

Załóżmy teraz, że dane nie są statyczne, ale przejściowe, buforowanie na serwerze przez umieszczenie ich w sesji nie będzie rozwiązaniem, które i tak chcesz. Za każdym razem, gdy twój klient wysyła żądanie do serwera, a serwer po prostu zwraca to, co jest w pamięci podręcznej (sesji), dane są już nieaktualne i nie ma żadnej różnicy od danych, które klient już posiada w pamięci.

Chodzi o to, że jeśli dane są statyczne, zapisz podróż w obie strony na serwer, gdy już masz dane w pamięci. Jeśli dane są przejściowe, obawiam się, że nie ma taniego rozwiązania, z wyjątkiem ponownego wysyłania zapytań lub ponownego pobierania danych i wysyłania wszystkiego z powrotem do klienta.

2

Jeśli twoje dane są specyficzne dla użytkownika, to jest to droga, którą można przejść od Session. Zachowaj ostrożność, jeśli masz farmę internetową lub ogród internetowy. W takim przypadku będziesz potrzebować serwera sesji lub bazy danych dla swojej sesji.

Jeśli twoje dane są na poziomie aplikacji, to może być jedna droga do uzyskania Application Data Cache. Bądź ostrożny, jeśli masz ograniczoną pamięć RAM i twoje dane są ogromne. Pamięć podręczna może się opróżnić w nieodpowiednim momencie.

Tak czy inaczej, będziesz musiał sprawdzić, jak twoja aplikacja wykonuje swoje zmiany. Możesz nawet znaleźć powrót do bazy danych, aby być najmniej złym rozwiązaniem.

Ponadto, niektóre dane można przejrzeć pod kątem Lazy Loading, aby było mniej ciężkie.

Powiązane problemy