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