我有很大的文本文件(1GB +)。所以我在考虑是否可能出现以下内容:
示例:
TEXTFILE:
"I am a test file. Please use me. You used me. Urraaaaaaaaaay!"
int array = {0,10,20};
3个线程的Parallel.ForEach:
1 GB只是一个文件。我们每隔10/24全天候收到一个这样的文件。
答案 0 :(得分:1)
并行for循环将加速从大文本文件中读取。鉴于您每10秒24小时获得1GB文件,因此实现Parallel.For循环是值得的。
David Lozinski在阅读文本文件时运行many tests (1),然后比较parallelism to regular for loops (所有示例均来自David Lozinski。)< / em>的
对于行长度相当于5个GUID(160个字符)的文本文件,使用ReadAllLines
将文本添加到数组更快。
例如:
AllLines = new string[MAX]; //only allocate memory here
AllLines = File.ReadAllLines(fileName);
对于行较长(> 10 GUID或320个字符)的文本文件,使用ReadLine
和使用或不使用BufferedStream
来创建数组的速度稍快一些。
AllLines = new string[MAX]; //only allocate memory here
using (StreamReader sr = File.OpenText(fileName))
{
int x = 0;
while (!sr.EndOfStream)
{
AllLines[x] = sr.ReadLine();
x += 1;
}
} // The using will dispose of any resources.
然后在Parallel For循环中处理该数组。
Parallel.For(0, AllLines.Length, x =>
{
YourFile Processing(AllLines[x]);
});
这应该使处理时间明显加快,尽管这也取决于运行程序的机器,它的CPU以及可用于传播并行进程的线程数。
(1)感谢jason.kaisersmith
中the comments的此链接