c# 并行处理
2023-12-29 09:02:29
以下是一个使用 C# 并行处理来读取大量小文件的例子,这个例子中我们使用 Parallel.ForEach
方法并结合 File.ReadAllLines
来提高读取速度:
using System;
using System.Collections.Concurrent;
using System.IO;
using System.Linq;
class Program
{
static void Main(string[] args)
{
string directoryPath = @"path_to_your_directory";
string searchPattern = "*.txt"; // 或其他符合你需求的文件扩展名
// 获取指定目录下所有符合模式的小文件
string[] files = Directory.GetFiles(directoryPath, searchPattern);
ConcurrentBag<string[]> allLines = new ConcurrentBag<string[]>();
// 使用并行处理读取所有文件
Parallel.ForEach(files, file =>
{
// 一次性读取整个文件
string[] lines = File.ReadAllLines(file);
allLines.Add(lines);
});
// 合并并处理所有行
string[] allFileContents = allLines.SelectMany(lines => lines).ToArray();
// 在这里处理所有的文件内容
foreach (string line in allFileContents)
{
// 在这里处理每一行
}
}
}
在这个例子中:
- 我们首先获取指定目录下所有符合特定模式(例如?
.txt
?扩展名)的文件。 - 使用?
Parallel.ForEach
?方法并行地读取每个文件的内容。这会利用多核处理器来同时读取多个文件,从而提高速度。 - 将每个文件的内容作为一个字符串数组添加到?
ConcurrentBag
?中。ConcurrentBag
?是一个线程安全的数据结构,适合在多线程环境中使用。 - 使用?
SelectMany
?方法将包含多个字符串数组的?ConcurrentBag
?合并成一个单一的字符串数组,这样就可以在一个循环中处理所有文件的内容。
请注意,这个例子假设你的系统和硬件能够支持并行处理,并且文件大小适中,可以一次性读入内存。在实际应用中,你可能需要根据具体的需求和环境进行调整。
文章来源:https://blog.csdn.net/wangyue4/article/details/135282021
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!