Frage

Ich arbeite an einem Projekt, in dem ich brauche eine riesige Menge (mehrere Gigabyte) Comma Separated Value (CSV) Dateien zu verarbeiten.

Was ich im Grunde tut, ist wie folgt:

  1. Erstellen Sie ein Objekt, das weiß, wie man lesen Sie alle zugehörigen Dateien
  2. Melden Sie sich bei diesem Objekt eine Reihe von Hörern, die in den Daten interessiert sind
  3. Lesen Sie jede Zeile jeder Datei, ein Objekt aus der Datenzeile erstellt Dispatching zu jedem der Zuhörer
  4. Jeder Zuhörer entscheidet, ob dieses Stück Daten ist nützlich / relevant

Ich frage mich, ob es besser wäre, anstatt auf der Quellenseite zu filtern, z.B. jeder Zuhörer hat ein zugehöriges Prädikats-Objekt, das den Hörer versandt wird ein bestimmtes Stück von Daten sollte, wobei in diesem Fall bestimmt, ob der Prozess wie

aussehen würde
  1. Erstellen Sie ein Objekt, das weiß, wie man lesen Sie alle zugehörigen Dateien
  2. Melden Sie sich bei diesem Objekt eine Reihe von Paaren
  3. Lesen Sie jede Zeile jeder Datei, ein Objekt aus der Datenzeile erstellt Dispatching zu jedem des Zuhörer, wenn sein zugehöriges Prädikat kehrt für die Daten
  4. true

Der Nettoeffekt ist das gleiche, es ist nur eine Frage, wo die Filterung erfolgt.

(Auch hier ist der einzige Grund, warum ich habe diesen ‚Strom‘ von Daten, die ich einen Eintrag zu einer Zeit verarbeiten ist, weil ich mit Gigabyte CSV-Dateien zu tun habe, und ich kann eine Sammlung erstellen, filtern, und dann damit umgehen - ich brauche zu filtern, wie ich gehe)

War es hilfreich?

Lösung

Es sei denn, die Kosten des Anrufs auf den Hörer sehr groß ist (Remoting, WCF, ...) Ich würde hier mit einem wirklich einfachen Schnittstelle und lassen Sie den Hörer entscheiden, was mit der Reihe zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top