Question

Je travaille sur un projet dans lequel je dois traiter une quantité énorme (plusieurs gigaoctets) de fichiers CSV (valeurs séparées par des virgules).

Ce que je fais fondamentalement est le suivant:

  1. Créez un objet qui sait comment lire tous les fichiers associés
  2. Inscrivez à cet objet un ensemble d'écouteurs intéressés par les données
  3. Lire chaque ligne de chaque fichier en envoyant un objet créé à partir de la ligne de données à chacun des auditeurs
  4. Chaque auditeur décide si cette donnée est utile / pertinente

Je me demande s'il serait préférable de filtrer à la source, par exemple. chaque écouteur a un objet Predicate associé qui détermine si une donnée donnée doit être envoyée à l'écouteur, auquel cas le processus ressemblerait davantage à

  1. Créez un objet qui sait comment lire tous les fichiers associés
  2. Enregistrez avec cet objet un ensemble de paires
  3. Lire chaque ligne de chaque fichier en envoyant un objet créé à partir de la ligne de données à chacun des écouteurs si son prédicat associé renvoie true pour les données

L’effet net est le même, c’est juste une question d’emplacement du filtrage.

(Encore une fois, la seule raison pour laquelle je dispose de ce "flux" de données que je traite une entrée à la fois est que je traite avec des gigaoctets de fichiers CSV et que je ne peux pas créer de collection, la filtrer et puis traiter avec elle - je dois filtrer au fur et à mesure)

Était-ce utile?

La solution

À moins que le coût de l'appel à l'auditeur soit énorme (Remoting, WCF, ...), je resterais avec une interface très simple et laisserais l'écouteur décider quoi faire avec la ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top