Mise en mémoire tampon sur le disque dur

Je reçois une grande quantité de données à un taux fixe. Je dois faire un traitement sur ces données sur un thread différent, mais cela peut être plus lent que l’arrivée des données, donc je dois mettre les données en mémoire tampon. En raison de la quantité de données entrant dans la mémoire vive disponible, celle-ci serait rapidement épuisée, ce qui nécessiterait un débordement sur le disque dur. Ce que je pouvais faire, c’est quelque chose comme un tuyau protégé par un système de fichiers, de sorte que le graveur pourrait être bloqué par le système de fichiers, mais pas par le lecteur qui tourne trop lentement.

Voici un ensemble d’exigences:

  • L’écriture ne doit pas être bloquée par le lecteur qui tourne trop lentement.
  • Si les données sont lues suffisamment lentement pour que la mémoire vive disponible soit épuisée, elle doit déborder vers le système de fichiers. C’est correct pour les écritures sur le disque à bloquer.
  • La lecture devrait être bloquée si aucune donnée n’est disponible à moins que le stream n’ait été fermé par le rédacteur.
  • Si le lecteur est capable de suivre les données, il ne devrait jamais bash le disque dur car le tampon de mémoire vive serait suffisant (sympa mais pas indispensable).
  • L’espace disque doit être récupéré à mesure que les données sont consommées (ou peu après).

Un tel mécanisme existe-t-il dans Windows?

Cela ressemble à une queue de messages classique. Avez-vous considéré MSMQ ou similaire? MSMQ a toutes les propriétés que vous demandez. Vous souhaiterez peut-être utiliser l’adressage direct pour éviter Active Directory http://msdn.microsoft.com/en-us/library/ms700996(v=vs.85).aspx et utiliser une adresse de queue locale ou TCP / IP.

Utilisez un fichier réel. Écrivez dans le fichier à mesure que les données sont reçues et, dans un autre processus, lisez les données du fichier et traitez-le.

Vous obtenez même les avantages supplémentaires de l’absence de multithreading.