非常简短的问题。我有一个随机排序的大型字符串数组(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();
最佳做法取决于您的需求:
LINQ确实确实会降低所有间接访问的速度。不必担心,因为99%的代码不会影响最终用户的性能。
我从C ++开始,真正学习了如何优化一段代码。LINQ不适合充分利用CPU。因此,如果您认为LINQ查询有问题,那就放弃它。但是只有这样。
对于您的代码示例,我估计速度会降低3倍。通过lambda进行的分配(以及后续的GC!)和间接操作确实很麻烦。