C# 在大文件中搜索性能差异

C# 在大文件中搜索性能差异,c#,C#,我选择了两种搜索大文件的方法。 我测试了500mb大小的文件。 第一路耗时9500ms,第二路耗时11500ms。 怎么会这样? 缓冲比每次迭代访问资源更快。 Linq比foreach搜索更强大。 内存分配有问题吗 1: 2: 在第一个代码段中,当找到匹配项时,不会停止循环。试着这样做: while ((line = __file.ReadLine()) != null) { var firstOccurrence = line.Contains(contains); if (f

我选择了两种搜索大文件的方法。 我测试了500mb大小的文件。 第一路耗时9500ms,第二路耗时11500ms。 怎么会这样? 缓冲比每次迭代访问资源更快。 Linq比foreach搜索更强大。 内存分配有问题吗

1:

2:


在第一个代码段中,当找到匹配项时,不会停止循环。试着这样做:

while ((line = __file.ReadLine()) != null)
{
    var firstOccurrence = line.Contains(contains);
    if (firstOccurrence)
    {
        break;
    }
}
在第二个代码段中,将整个文件读入内存,然后开始逐行查看。这与您的第一个代码段不同,在第一个代码段中,您从磁盘一次读取一行文件

等效的方法是--逐行读取文件:

var firstOccurrence = File.ReadLines(_file).FirstOrDefault(l => l.Contains(Contains));

在第一个代码段中,当找到匹配项时,不会停止循环。试着这样做:

while ((line = __file.ReadLine()) != null)
{
    var firstOccurrence = line.Contains(contains);
    if (firstOccurrence)
    {
        break;
    }
}
在第二个代码段中,将整个文件读入内存,然后开始逐行查看。这与您的第一个代码段不同,在第一个代码段中,您从磁盘一次读取一行文件

等效的方法是--逐行读取文件:

var firstOccurrence = File.ReadLines(_file).FirstOrDefault(l => l.Contains(Contains));

我真的不能肯定地说,所以其他人可以插话,但我认为
ReadAllLines()
并不是一个高性能的iirc。加载500mb的文件可能相当昂贵,而且需要很多通道。由于集合列表中有很多项,因此不会是执行搜索的性能最好的集合。Linq比foreach搜索功能更强大,如果你的意思是更快,则不是。仅搜索半GB的文本大约需要10秒钟的时间。这是500 MB的2字符行还是百万字符行,或者介于两者之间?你是如何计算死刑执行时间的<代码>日期时间。现在,
秒表
,一个挂钟,还有别的吗?你做了多少次跑步?是的秒表,跑步没有改变,简单的MPQ文件来自wow/data文件夹大约15k ROWS我真的不能肯定,所以其他人可以插话,但我认为
ReadAllLines()
并不是一个超高性能的iirc。加载500mb的文件可能相当昂贵,而且需要很多通道。由于集合列表中有很多项,因此不会是执行搜索的性能最好的集合。Linq比foreach搜索功能更强大,如果你的意思是更快,则不是。仅搜索半GB的文本大约需要10秒钟的时间。这是500 MB的2字符行还是百万字符行,或者介于两者之间?你是如何计算死刑执行时间的<代码>日期时间。现在,
秒表
,一个挂钟,还有别的吗?你做了多少次跑步?是的秒表,跑步没有改变,wow/data文件夹中的简单MPQ文件大约15k行在我的情况下不实际需要我没有发现任何东西在我的情况下不实际需要我没有发现任何东西