1

我必须解析很多文件。所以现在我打开一个文件来读取解析内容并将输出写入不同的位置。这基本上是我需要做的,但我想加快这个过程,因为我正在解析 14000 个文件。

我通过在多个线程上拆分工作来改进我的算法。所以我有 1 个线程执行 25% 的文件,接下来是 25%,依此类推。

无论如何,如果我有以下条件,我相信我会显着提高性能和速度:

  1. Task 1读取文件并将文件内容放入 BlockingCollection1(内存)
  2. Task 2将创建多个线程来解析内容BlockingCollection1并将解析后的数据放入BlockingCollection2
  3. Task 3从磁盘读取内容BlockingCollection2并将其写入磁盘。

我现在遇到的问题是出现内存不足异常。我想让垃圾收集器从 BlockingCollection1 中删除已使用的项目。BlockingCollection2如果项目已写入磁盘,我也想删除它们。

使用 a 非常方便,BlockingCollection<T>因为一个线程可以将项目添加到该集合中,而另一个线程可以处理这些项目。在我使用链接列表之前,但我倾向于这个问题:https : //stackoverflow.com/a/12519345/637142 BlockingCollection 的文章和有用性如何。 无论如何我怎么能解决这个问题?我是否必须使用不同类型的集合,例如堆栈?

4

1 回答 1

3

创建BlockingCollection<T>实例时,可以使用接受bounding capacity的构造函数。这可以防止您一次将太多项目放入集合中,这可以帮助您限制“生成”的项目数量以帮助匹配消耗的项目数量。

通过保持这种限制,您可能会阻止自己使用所有内存,因为您处理项目的速度不会比将它们写入磁盘的速度更快。

于 2012-09-28T21:10:26.240 回答