Stocker les données en cache localement
Je développe en C# Winform application, c'est un client et se connecter au web service pour obtenir les données. Les données renvoyées par le service web est une DataTable. Client de les afficher sur un DataGridView.
Mon problème est que: le Client devra prendre plus de temps pour obtenir toutes les données à partir du serveur (web service n'est pas local avec le client). Donc, je dois utiliser un thread pour obtenir des données. C'est mon modèle:
Client de créer un thread pour obtenir des données -> fil remplir et envoyer à l'événement de client -> client affichage des données sur datagridview sur un formulaire.
Cependant, lorsque l'utilisateur ferme le formulaire, l'utilisateur peut ouvrir le formulaire dans un autre temps, et le client doit obtenir les données à nouveau. Cette solution permet au client lentement.
Donc, je pense à une mise en cache de données:
Client <---get/ajouter/modifier/supprimer---> les Données mises en Cache ---get/ajouter/modifier/supprimer--->Serveur (web service)
Merci de me donner quelques suggestions.
Exemple: mise en cache des données devrait être développé dans une autre application qui est la même hôte avec le client? Ou de mise en cache de données est en cours d'exécution dans le client.
Merci de me donner quelques techniques pour mettre en œuvre cette solution.
Si vous avez des exemples, veuillez me donner.
Grâce.
Mise à JOUR : Bonjour tout le monde, peut-être que vous pensez que mon problème jusqu'à présent. Je veux seulement mettre en cache des données du client à vie. Je pense que le cache de données doivent être stockées dans la mémoire. Et lorsque le client souhaite obtenir des données, il va vérifier à partir du cache.
Mis à jour. J'ai seulement besoin de la mise en cache de données est disponible dans le client de sa vie. Merci.
OriginalL'auteur Leo Vo | 2010-06-15
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer le L'Entreprise De La Bibliothèque's La Mise En Cache De Bloc D'Application. Il est facile à utiliser, stocke en mémoire et, si jamais vous avez besoin de plus tard, il prend en charge l'ajout d'un emplacement de sauvegarde pour la persistance au-delà de la durée de vie de l'application (par exemple pour une base de données, le stockage isolé, fichier, etc.) et même de chiffrement trop.
Utilisation EntLib 3.1 si vous êtes coincé avec .NET 2.0. Il n'y a pas grand chose de nouveau (pour la mise en cache, au moins) dans la nouvelle EntLibs mis à part une meilleure personnalisation de soutien.
OriginalL'auteur Sean Hanley
Si vous êtes à l'aide de C# 2.0 et vous êtes prêt à expédier Système.Web comme une dépendance, alors vous pouvez utiliser l'ASP.NET cache:
Si vous n'êtes pas prêt d'expédier Système.Web, alors vous voudrez peut-être jeter un oeil à la L'entreprise de la Bibliothèque de la mise en Cache de bloc.
Si vous êtes sur .NET 4.0, cependant, la mise en cache a été poussé dans le Système.Moment de l'exécution.La mise en cache de l'espace de noms. Pour l'utiliser, vous devez ajouter une référence à System.Moment de l'exécution.La mise en cache, puis votre code devrait ressembler à quelque chose comme ceci:
Tous ces caches exécuter en cours pour le client. Parce que vous êtes des données est à venir à partir d'un web service, comme le dit Adam, vous allez avoir de la difficulté à déterminer la fraîcheur des données, vous aurez à prendre une décision sur la façon dont souvent les changements de données et combien de temps vous mettre en cache les données.
OriginalL'auteur PhilPursglove
Vous avez la possibilité de modifier/ajouter à la webservice?
Si vous pouvez les Services de Synchronisation peut être une option pour vous. Vous pouvez définir les tables qui sont syncronised, et tous la synchronisation des choses est géré pour vous.
Découvrez
http://msdn.microsoft.com/en-us/sync/default.aspx
et de crier, si vous avez besoin de plus d'informations.
OriginalL'auteur JohnnyJP
Identifier les objets à sérialiser, et le cache de stockage isolé. Spécifiez le niveau d'isolation des données que vous souhaitez (niveau de l'application, le niveau de l'utilisateur, etc).
Exemple:
Vous pouvez créer un générique sérialiseur, un exemple très simple devrait ressembler à ceci:
Notez que vous devriez probablement mettre dans certains des surcharges de la Sérialiser et Désérialiser les méthodes d'accueillir les lecteurs, ou de tout autre type, vous êtes réellement en utilisant votre application (par exemple, XmlDocuments, etc).
L'opération pour enregistrer à l'IsolatedStorage peuvent être manipulés par une classe utilitaire (exemple ci-dessous):
Enfin, n'oubliez pas d'ajouter les éléments suivants à l'aide de clauses:
Le code à utiliser les classes ci-dessus pourrait ressembler à ceci:
Cela permettra d'économiser de l'instance que vous spécifiez pour être sauvé pour le stockage isolé. Pour récupérer l'instance, il suffit d'appeler:
Remarque: l'exemple que j'ai fourni prend en charge un seul sérialisé instance par type. Je ne suis pas sûr si vous avez besoin de plus que cela. Faire toutes les modifications nécessaires pour prendre en charge davantage de fonctionnalités.
HTH!
OriginalL'auteur code4life
Vous pouvez serialise la DataTable dans le fichier:
http://forums.asp.net/t/1441971.aspx
Votre seule préoccupation est alors de décider quand le cache a perdu de leur fraîcheur. Peut-être horodatage du fichier?
OriginalL'auteur Adam Houldsworth
Dans notre mise en œuvre de chaque ligne dans la base de données a une dernière mise à jour le timestamp. À chaque fois que notre application client accède à un tableau, sélectionnez la dernière la dernière mise à jour le timestamp à partir du cache et de l'envoyer en valeur pour le serveur. Le serveur répond avec toutes les lignes qui ont nouveaux horodateurs.
OriginalL'auteur user356687