2009-10-10 10 views
2

J'ai écrit ma propre classe PageStatePersister basée sur SessionPageStatePersister qui écrit les 10 10 Viewstate s les plus récents pour une session sur un disque partagé. Je pense que cela fonctionnera mieux que de garder Viewstate en session puisque tous les serveurs web y ont accès, ils n'auront pas à gérer l'expiration et utiliseront moins de mémoire.Viewstate dans les fichiers plats vs viewstate dans SQLserver

Lorsqu'un utilisateur ferme le navigateur, il avertit le serveur et le serveur supprime les fichiers qui n'ont pas été consultés depuis deux heures. Jusqu'ici tout va bien, mais je me demande s'il sera plus rapide et plus efficace de stocker Viewstate dans une base de données SQL Server.

  1. Chaque fichier ViewState a une taille moyenne de 30k.
  2. Actuellement, il suffit de lire un champ caché pour obtenir une clé Viewstate et accéder directement au fichier et le désérialiser. Il n'y a pas besoin de trier ou de chercher.
  3. Il y aura environ 2000 utilisateurs simultanés par heure et l'enregistrement des dernières 20 sessions Viewstate sera d'environ 20k fichiers d'affichage temporaire par heure.
  4. Il doit régulièrement parcourir les fichiers et supprimer le fichier le plus ancien.

Alors qui est mieux dans ce cas: un système flatfile ou une base de données ?

+0

Vous avez mentionné "Je pense que cela sera plus efficace que de garder viewstate en session puisque tous les serveurs web y ont accès". Que voulez-vous dire par l'état de view est maintenu en session? Est-ce quelque chose que vous vouliez explicitement? Pour stocker les données viewstate dans le serveur et non sur les navigateurs des clients? –

+2

yep viewstate devrait être sur le serveur. – Tuviah

Répondre

3

Il serait beaucoup mieux de stocker le ViewState dans SQL Server. Par exemple, si vous voulez passer de la dernière 10 à la plus récente, par exemple, il s'agira d'une augmentation relativement minime de la charge de la base de données. Les E/S disque doivent généralement être évitées autant que possible, plus que les E/S DB. Les opérations de nettoyage fonctionneraient également beaucoup mieux, car la recherche à travers une friche de fichiers abandonnés sur le disque est probablement beaucoup plus lourd que WHERE DateInserted > 20 minutes ago.