Domanda

Sto lavorando a un progetto in cui devo elaborare una grande quantità (più gigabyte) di file con valori separati da virgola (CSV).

Quello che faccio sostanzialmente è il seguente:

  1. Crea un oggetto che sa come farlo leggi tutti i file correlati
  2. Registra con questo oggetto una serie di ascoltatori che sono interessati ai dati
  3. Leggi ogni riga di ogni file, inviando un oggetto creato dalla riga di dati a ciascuno degli ascoltatori
  4. Ogni Listener decide se questo dato è utile / rilevante

Mi chiedo se sarebbe meglio filtrare invece sul lato sorgente, ad es. a ciascun ascoltatore è associato un oggetto Predicato che determina se un determinato dato deve essere inviato all'ascoltatore, nel qual caso il processo sembrerebbe più simile a

  1. Crea un oggetto che sa come farlo leggi tutti i file correlati
  2. Registra con questo oggetto un insieme di coppie
  3. Leggi ogni riga di ogni file, inviando un oggetto creato dalla riga di dati a ciascuno degli ascoltatori se il Predicato associato restituisce true per i dati

L'effetto netto è lo stesso, dipende solo da dove ha luogo il filtro.

(Ancora una volta, l'unica ragione per cui ho questo "flusso" di dati che elaboro una voce alla volta è perché ho a che fare con gigabyte di file CSV e non riesco a creare una raccolta, filtrarla e quindi affrontalo - devo filtrare mentre vado)

È stato utile?

Soluzione

A meno che il costo della chiamata all'ascoltatore non sia enorme (Remoting, WCF, ...) rimarrei con un'interfaccia davvero semplice e lascerei che l'ascoltatore decida cosa fare della riga.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top