LINQ更快还是更方便?

Jor*_*dan 3 linq performance delayed-execution

哪个场景会更快?

场景1:

foreach (var file in directory.GetFiles())
{
    if (file.Extension.ToLower() != ".txt" &&
        file.Extension.ToLower() != ".bin")
        continue;

    // Do something cool.
}
Run Code Online (Sandbox Code Playgroud)

场景2:

var files = from file in directory.GetFiles()
                where file.Extension.ToLower() == ".txt" ||
                      file.Extension.ToLower() == ".bin"
                select file;

foreach (var file in files)
{
     // Do something cool.
} 
Run Code Online (Sandbox Code Playgroud)

我知道它们在逻辑上是相同的,因为延迟执行,但哪个会更快?为什么?

jas*_*son 6

更快通常不是问题本身,特别是在这样的情况下,不会有有意义的性能差异(一般来说,如果代码不是瓶颈,那就无关紧要).问题是更易读,更清楚地表达代码的意图.

我认为第二个代码块更清楚地表达了代码的意图.它读作"查询具有特定属性的某些文件名的文件名集合",然后"对于具有该属性的每个文件名,执行某些操作".它宣告正在发生的事情,而不是它将如何发生.将机制与机制分开是使第二个代码块更清晰以及LINQ真正发挥作用的原因.使用LINQ来声明什么,让LINQ实现机制而不是过去那些与机制混淆的机制.

LINQ更快还是更方便?

因此,为了回答标题中的问题,LINQ通常不会对性能产生重大影响,但通过允许编码人员声明他们想要做什么而不必专注于他们想要完成某些事情的方式,它可以使代码更加清晰.在一天结束时,我们不关心如何,我们关心什么.

我知道它们在逻辑上是相同的,因为延迟执行,但哪个会更快?

可能是命令式版本,因为使用LINQ会产生很少的开销.但是如果你真的必须知道哪个更快,一定要使用分析器,并确保测试真实世界的数据.

为什么?

因为LINQ增加了一点开销.但是,权衡更明确,代码更易于维护.与通常不相关的性能损失相比,这是一个巨大的胜利.