我必须解析很多文件。所以现在我打开一个文件来读取解析内容并将输出写在不同的位置。 这基本上是我需要做的,但我想加快这个过程,因为我正在解析14000个文件。
我通过在多个线程上分割工作来改进我的算法。所以我有1个线程在接下来的25%中执行25%的文件,依此类推。
无论如何,如果我有以下情况,我相信我会大幅提升性能和速度:
Task 1
读取文件并将文件内容放在BlockingCollection1
(内存)中Task 2
将创建多个线程来解析BlockingCollection1
的内容,并将解析后的数据放入BlockingCollection2
Task 3
从BlockingCollection2
读取内容并将其写入磁盘。 我现在遇到的问题是我的内存不足异常。我想让垃圾收集器从BlockingCollection1中删除项目(如果已经使用过)。如果已将BlockingCollection2
内的项目写入磁盘,我也会将其删除。
使用BlockingCollection<T>
非常方便,因为一个线程可以向该集合添加项目,而另一个线程可以处理这些项目。在我使用链接列表但我倾斜之前在这个问题中:https://stackoverflow.com/a/12519345/637142 BlockingCollection的文章和用途如何。 无论如何我怎么能解决这个问题?我是否必须使用不同类型的集合,例如堆栈?
答案 0 :(得分:3)
创建BlockingCollection<T>
实例时,可以使用接受bounding capacity的构造函数。这可以防止您一次将太多项目放入集合中,这可以帮助您限制“生成”项目的数量,以帮助匹配所消耗的项目数。
通过保持这种限制,您可能会阻止自己使用所有内存,因为您不会比将它们写入磁盘更快地处理项目。