c# – linq函数OrderByDescending和OrderBy如何在字符串长度内部工作?它比使用循环更快吗?

前端之家收集整理的这篇文章主要介绍了c# – linq函数OrderByDescending和OrderBy如何在字符串长度内部工作?它比使用循环更快吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的问题是基于 this question提出的,我在这个问题上发布了答案. here

这是代码.

var lines = System.IO.File.ReadLines(@"C:\test.txt");
var Minimum = lines[0];//Default length set
var Maximum = "";

foreach (string line in lines)
{    
    if (Maximum.Length < line.Length)
    {
        Maximum = line;
    }

    if (Minimum.Length > line.Length)
    {
        Minimum = line;
    }
}

使用LINQ(我的方法)替代此代码

var lines = System.IO.File.ReadLines(@"C:\test.txt");
var Maximum = lines.OrderByDescending(a => a.Length).First().ToString();
var Minimum = lines.OrderBy(a => a.Length).First().ToString();

LINQ易于阅读和实现..

我想知道哪一个对性能有好处.
以及Linq如何在内部为OrderByDescending和OrderBy进行长度排序?

解决方法

你可以 read the source code for OrderBy.

停止对代码执行micro-optimizingpremature-optimization.尝试编写正确执行的代码,然后如果您以后遇到性能问题,请分析您的应用程序并查看问题所在.如果由于找到最短和最长的字符串而有一段代码存在性能问题,那么就开始优化这部分.

We should forget about small efficiencies,say about 97% of the time:
premature optimization is the root of all evil. Yet we should not pass
up our opportunities in that critical 3% – Donald Knuth

File.ReadLines返回一个IEnumerable< string>,这意味着如果你对它进行foreach,它将逐个返回给你的数据.我认为你可以在这里做的最好的性能改进是改进从磁盘读取文件.如果它足够小以将整个文件加载到内存中,请使用File.ReadAllLines,如果不是尝试读取适合内存的大块文件.逐行读取文件会因磁盘的I / O操作而导致性能下降.所以这里的问题不是LINQ或循环如何执行,问题在于磁盘读取次数.

猜你在找的C#相关文章