【发布时间】:2011-05-11 08:32:41
【问题描述】:
我在 FileInfoCollection 中有一个文件集合(3000 个文件)。我想通过应用一些独立的逻辑(可以并行执行)来处理所有文件。
FileInfo[] fileInfoCollection = directory.GetFiles();
Parallel.ForEach(fileInfoCollection, ProcessWorkerItem);
但在处理了大约 700 个文件后,我遇到了内存不足错误。我之前使用过线程池,但它给出了同样的错误。 如果我尝试在没有线程(并行处理)的情况下执行,它工作正常。
在“ProcessWorkerItem”中,我正在运行基于文件字符串数据的算法。此外,我使用 log4net 进行日志记录,并且在这种方法中与 SQL 服务器有很多通信。
这里有一些信息,文件大小:1-2 KB XML 文件。我阅读了这些文件,该过程取决于文件的内容。它正在识别字符串中的一些关键字并生成另一种 XML 格式。关键字在 SQL server 数据库中(将近 2000 个字)。
【问题讨论】:
-
如果您发布“ProcessWorkerItem”会有所帮助。
-
文件 IO 是否适合并发处理?
-
另外,IIRC 和
OutOfMemoryException表示缺少连续页内存;你可能会通过组织你的方法以在更多的小块中使用内存而侥幸。 -
@Robert ,'ProcessWorkerItem' 不能被描述为一个单一的方法,因为它也调用了几个方法。但我可以给个描述
-
@phil ,我不明白如何“在更多的小块中使用内存”
标签: .net multithreading plinq