1

我正在处理一个需要处理大量(数 GB)逗号分隔值 (CSV) 文件的项目。

我基本上做的事情如下:

  1. 创建一个知道如何读取所有相关文件的对象
  2. 向该对象注册一组对数据感兴趣的 Listeners
  3. 读取每个文件的每一行,将从数据行创建的对象分派给每个侦听器
  4. 每个 Listener 决定这条数据是否有用/相关

我想知道在源端进行过滤是否会更好,例如,每个侦听器都有一个关联的 Predicate 对象,该对象确定是否应将给定的数据分派给侦听器,在这种情况下,流程看起来更像

  1. 创建一个知道如何读取所有相关文件的对象
  2. 向该对象注册一组对
  3. 读取每个文件的每一行,如果其关联的 Predicate 为数据返回 true,则将从该数据行创建的对象分派给每个侦听器

净效果是一样的,只是过滤发生在哪里的问题。

(同样,我拥有一次处理一个条目的这种“数据流”的唯一原因是因为我正在处理千兆字节的 CSV 文件,并且我无法创建集合、过滤它,然后再处理它 - 我需要随时过滤)

4

1 回答 1

2

除非调用侦听器的成本很大(Remoting、WCF、...),否则我会保留一个非常简单的界面,让侦听器决定如何处理该行。

于 2009-10-26T15:23:36.197 回答