2012-11-17 67 views
7

Mam do przechowywania danych tysięcy rekordów w tabeli danych i utrzymywane na odświeżenie. Która opcja jest odpowiednia dla mnie stanu widoku (którego użyłem) lub sesji. Kiedy użyłem stanu widoku, utworzy on ukryte pole do przechowywania i spowolni ładowanie strony. Czy jest tam jakiś narzut (zużycie pamięci po stronie serwera i opóźnienie w odpowiedziach) w przechowywaniu go w sesji. Proszę zasugerować mi rozwiązanieCo jest lepsze dla stanu wydajności lub sesji

+1

Nie należy przechowywać tysiące zapisów w sesji lub zobacz Państwie. –

+0

Co to jest najlepsza praktyka wtedy –

+1

Pobierz tylko te dane, które są wymagane na stronie. Podobnie jak w przypadku używania tabeli danych do wiązania siatki. Następnie tabela danych powinna zawierać tylko te dane, które są wymagane na bieżącej stronie widoku siatki. –

Odpowiedz

12

W przypadku dużych ilości danych sesja jest bardziej wydajna. Jeśli możesz wykryć, kiedy użytkownik wykonuje określony blok danych, ustaw zmienną Session na wartość null, aby pomóc w narzucie pamięci. Nie zawsze można to zrobić, ale sesja ostatecznie wygasa, a pamięć zostanie odzyskana. Obniżenie limitu czasu sesji może pomóc niektórym, ale nie ustawiaj go zbyt małego, nie chcesz odciąć użytkowników. Sesja musi być włączona w pliku Web.config.

Poniżej znajduje się podstawowe informacje o sesji porównaniu ViewState:

ViewState: binarny struktury danych ViewState jest kodowany base64 być umieszczony na stronie, co oznacza, że ​​1.3333 razy (8/6) wielkość oryginalnych danych binarnych. Te dane są przesyłane i pobierane dla każdego widoku strony. Więc jeśli masz dużo w ViewState, wpływa to na czas odpowiedzi strony. Kodowanie Base64 jest prawdopodobnie wysoce zoptymalizowane, więc nie jest to trafienie wydajnościowe. Każde żądanie strony przydzieli, a następnie zwolni miejsce dla ViewState, więc nie jest to trafienie pamięci długoterminowej. Ponieważ dane znajdują się na stronie, nie wygasa.

Sesja: Wszystkie dane w sesji są zachowywane na serwerze sieciowym między ładowaniami stron. Dzięki temu strona jest mała, musi tylko mieć identyfikator Sesji. Z drugiej strony pamięć wykorzystywana do przechowywania danych w sesji zostaje przydzielona do czasu wygaśnięcia sesji. Zastanawiałem się, czy sesja kopiuje dane binarne, czy po prostu utrzymuje wskaźnik. Podobnie jak w przypadku kodowania Base64, można to zoptymalizować, więc jeśli tak się stanie, nie jest to trafienie wydajnościowe. Sesja może wygasnąć, jeśli użytkownik zbyt długo czeka na odsłony strony. Jeśli sesja wygasa, powinna zwrócić użytkownika z powrotem do jakiegoś znanego stanu na stronie internetowej.

Innym problemem tutaj, jeśli przechowujesz informacje w sesji, identyfikator sesji może być współdzielony przez wiele kart w przeglądarce klienta. Musisz uważać, jak używasz danych przechowywanych w Sesji. Upewnij się, że to testujesz, aby Twoi użytkownicy nie otrzymywali nieoczekiwanych wyników.

(Uwaga: Korzystanie z ViewState jest relaksującego, Sesja nie jest.)

+0

Co się stanie, jeśli użyję zmiennych sesyjnych zamiast viewstate? –

+0

Viewstate jest bardziej trwały, ponieważ jest obsługiwany przez przeglądarkę użytkownika. Więc nawet jeśli użytkownik siedzi na stronie przez godzinę, a następnie kliknie gdzieś, strona będzie nadal utrzymywać stan przeglądania, a sesja prawdopodobnie wygasła. Sztuką jest znalezienie właściwej równowagi. – gmlobdell

+0

Tak, masz rację, ale chcę czegoś innego, jakie będzie zużycie pamięci i czas wymagany do załadowania strony w obu przypadkach. –