一尘不染

对于vs.Linq-性能与未来

c#

非常简短的问题。我有一个随机排序的大型字符串数组(100K个条目),在这里我想找到所需字符串的第一次出现。我有两个解决方案。

从阅读中我可以猜到,“
for循环”当前将提供更好的性能(但是此余量可以随时更改),但是我也发现linq版本更具可读性。总而言之,通常认为哪种方法是当前最佳编码实践,为什么?

string matchString = "dsf897sdf78";
int matchIndex = -1;
for(int i=0; i<array.length; i++)
{
    if(array[i]==matchString)
    {
        matchIndex = i;
        break;
    }
}

要么

int matchIndex = array.Select((r, i) => new { value = r, index = i })
                         .Where(t => t.value == matchString)
                         .Select(s => s.index).First();

阅读 386

收藏
2020-05-19

共1个答案

一尘不染

最佳做法取决于您的需求:

  1. 开发速度和可维护性:LINQ
  2. 性能(根据性能分析工具):手动代码

LINQ确实确实会降低所有间接访问的速度。不必担心,因为99%的代码不会影响最终用户的性能。

我从C ++开始,真正学习了如何优化一段代码。LINQ不适合充分利用CPU。因此,如果您认为LINQ查询有问题,那就放弃它。但是只有这样。

对于您的代码示例,我估计速度会降低3倍。通过lambda进行的分配(以及后续的GC!)和间接操作确实很麻烦。

2020-05-19