c# - 如何在大文件的所有行上使用 Parallel.ForEach 循环
问题描述
我想使用 Parallel.ForEach 循环一个大文件(2GB 文件)的所有行。
我目前正在foreach
这样使用:
var lines = File.ReadLines(fileName);
foreach (var line in lines) {
// Process line
}
是否可以将其转换为Parallel.ForEach
并使用File.ReadLines
too 因为它不消耗更多内存?
任何帮助,将不胜感激。
谢谢!
解决方案
怎么样
using (var linesDisposable = File.ReadLines(fileName) as IDisposable)
{
var lines = linesDisposable as IEnumerable<string>;
Parallel.ForEach<string>(lines, line => {
//Process(line);
});
}
请注意,“使用 + IDisposable”是最佳实践。底层的线路流实现了 IDisposable 并且谨慎使用它。如果我们省略“使用”,那么如果/当对“进程()”的调用引发异常时,流将不会自动处理,这可能会导致各种问题,因为文件将被底层操作系统锁定(所以我们将无法删除它等)。
脚注:如果您使用的是 dotnet-core,您可能还想像这样简化嵌套:
using var linesDisposable = File.ReadLines(fileName) as IDisposable;
var lines = linesDisposable as IEnumerable<string>;
Parallel.ForEach<string>(lines, line => {
//Process(line);
});
推荐阅读
- c - 为什么我的程序没有显示任何输出?0 个错误,0 个警告但没有输出?我正在使用 Dev C++ 编译器
- nginx - 在 AKS 集群中启用 CloudFlare 的 Argo 隧道
- ssl - HTTPS 的 GKE Ingress 和 TCP 的 LoadBalancer 在同一后端?
- python - 在 for 循环中向 Plotly Graph 添加跟踪,仅显示循环中的最后一个跟踪
- javascript - 当我使用列 lfor 分屏时,我看不到一些导航栏项目
- css - 等高的CSS网格线
- javascript - 为什么 IntersectionObserver 不适用于中间 div?
- c++ - 逆 Eigen::MatrixXd 的错误计算
- python - 没有函数python的分隔字符串字符
- reactjs - Carousel React JS、JSON、JSX TypeError:无法读取未定义的属性“”