gpt4 book ai didi

.net - 并行 Foreach 内存问题

转载 作者:行者123 更新时间:2023-12-04 14:18:37 26 4
gpt4 key购买 nike

我在 FileInfoCollection 中有一个文件集合(3000 个文件)。我想通过应用一些独立的逻辑(可以并行执行)来处理所有文件。

 FileInfo[] fileInfoCollection = directory.GetFiles();
Parallel.ForEach(fileInfoCollection, ProcessWorkerItem);

但是在处理了大约 700 个文件后,我遇到了内存不足错误。我之前使用过线程池,但它给出了同样的错误。
如果我尝试在没有线程(并行处理)的情况下执行,它可以正常工作。

在“ProcessWorkerItem”中,我正在运行基于文件字符串数据的算法。此外,我使用 log4net 进行日志记录,并且在此方法中与 SQL 服务器进行了大量通信。

以下是一些信息,文件大小:1-2 KB XML 文件。我阅读了这些文件,该过程取决于文件的内容。它识别字符串中的一些关键字并生成另一种 XML 格式。关键字在 SQL server 数据库中(近 2000 字)。

最佳答案

那么,什么是ProcessWorkerItem做?您可以更改它以使用更少的内存(例如,流式传输数据而不是一次加载所有数据),或者您可能希望使用 this overload 明确限制并行度。和 ParallelOptions.MaxDegreeOfParallelism .基本上,您想避免尝试一次处理所有 3000 个文件:) IIRC,Parallel Extensions 会“注意到”您的任务是否受 IO 限制,并允许一次执行超过正常数量的数量 - 这不是真正的你想要这里,因为你也受内存限制。

关于.net - 并行 Foreach 内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5961385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com