我必须解析很多文件。所以现在我打开一个文件来读取解析内容并将输出写入不同的位置。这基本上是我需要做的,但我想加快这个过程,因为我正在解析 14000 个文件。
我通过在多个线程上拆分工作来改进我的算法。所以我有 1 个线程执行 25% 的文件,接下来是 25%,依此类推。
无论如何,如果我有以下条件,我相信我会显着提高性能和速度:
Task 1
读取文件并将文件内容放入BlockingCollection1
(内存)Task 2
将创建多个线程来解析内容BlockingCollection1
并将解析后的数据放入BlockingCollection2
Task 3
从磁盘读取内容BlockingCollection2
并将其写入磁盘。
我现在遇到的问题是出现内存不足异常。我想让垃圾收集器从 BlockingCollection1 中删除已使用的项目。BlockingCollection2
如果项目已写入磁盘,我也想删除它们。
使用 a 非常方便,BlockingCollection<T>
因为一个线程可以将项目添加到该集合中,而另一个线程可以处理这些项目。在我使用链接列表之前,但我倾向于这个问题:https : //stackoverflow.com/a/12519345/637142 BlockingCollection 的文章和有用性如何。 无论如何我怎么能解决这个问题?我是否必须使用不同类型的集合,例如堆栈?