Garder les données persistantes en mémoire

Je suis sur le sharepoint développer un service Windows en C #. Ce service doit suivre les événements du système et écrire des données dans des fichiers de temps en temps. Ces événements en cours forment un certain état, donc je garderai l’état en mémoire et le mettrai à jour lorsque les événements arriveront. Je ne veux pas trop compliquer les choses, donc je ne veux pas que l’état soit persistant sur le disque, mais je me demande si je pourrais le rendre persistant en mémoire, de sorte que si le service plante (et redémarre automatiquement en Windows) il pourrait reprendre là où il est parti et continuer (peut-être perdre certains événements, pas un gros problème).

Je pensais à la création d’une zone de mémoire “partagée”, permettant ainsi à Windows de le gérer et de l’utiliser uniquement dans le service – mais je ne suis pas sûr que cet object persiste après la mort du service.

Des idées?

EDIT : Je ne cherche pas une solution exagérée. Les données sont quelque peu importantes, alors je voudrais les garder en mémoire jusqu’à ce que le service soit redémarré, mais les données ne sont pas trop importantes. C’est plus une fonctionnalité intéressante si je peux facilement conserver les données sans travailler avec des fichiers, des processus tiers externes, etc. Ma solution idéale serait une fonctionnalité intégrée simple (en .NET ou Windows) qui me fournirait une certaine persistance mémorable, juste pour récupérer d’un incident.

Vous pouvez utiliser un cache de persistance à partir de Microsoft Enterprise Library .

Il est configurable et vous pouvez utiliser de nombreux magasins de sauvegarde comme la firebase database et le stockage isolé.

Je sais que vous avez dit que vous ne voulez pas trop compliquer les choses en le persistant sur le disque, mais cela va certainement compliquer davantage la persistance des choses dans la mémoire partagée ou dans l’une des solutions listées ici. La raison pour laquelle tant d’applications utilisent des bases de données ou du stockage de fichiers est la solution la plus simple.

Je vous recommande de garder tout l’état dans un seul object ou une hiérarchie d’objects, sérialiser cet object en XML et l’écrire dans un fichier. Cela ne devient vraiment pas beaucoup plus simple que cela.

Vous pouvez utiliser Memcached ou Redis (qui conserve également les données sur le disque, mais les gère automatiquement).

http://code.google.com/p/redis/

Vous pouvez également jeter un coup d’œil à cette question:

Memcached avec Windows et .NET

Je ne vois pas pourquoi il serait plus difficile de persister sur le disque.

En utilisant db4o, vous pouvez conserver les instances avec lesquelles vous travaillez déjà.

Que diriez-vous d’utiliser un stockage isolé et de conserver l’object en mémoire de cette façon?

Même si, par exemple, vous conservez les données sur une mémoire partagée d’un autre PC en réseau , comment pouvez-vous “garantir” que le PC en réseau ne se bloque pas / redémarre / arrête / etc? Dans ce cas, votre service perdra les données persistantes de toute façon.

Je suggérerais, et il y a des chances que vous vous retrouviez, en stockant les données sur le même disque.

Notez que, en raison de la nature volatile de la mémoire (RAM), vous ne pouvez pas recharger les données qui s’y trouvaient auparavant, avant le redémarrage du système; pas sauf si vous utilisez un mécanisme pour stocker / recharger sur le disque.

–MODIFIER–

Dans ce cas, pourquoi ne pas utiliser MSMQ ? Ainsi, vous pouvez tout transférer dans la queue, et même si votre service est redémarré, il recherche les éléments dans la queue et continue.