Linq对对象的速度比普通C#慢20倍。有没有办法加快速度?

问题描述 投票:0回答:1

如果我只需要一个数组的最大值[或3个最大项,则用myArray.OrderBy(...)。First()[或myArray.OrderBy(...)。Take(3 )],比调用myArray.Max()慢20倍。有没有一种方法可以编写更快的linq查询?这是我的示例:

using System;
using System.Linq;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var array = new int[1000000];
            for (int i = 0; i < array.Length; i++)
            {
                array[i] = i;
            }

            var maxResults = new int[10];
            var linqResults = new int[10];
            var start = DateTime.Now;

            for (int i = 0; i < maxResults.Length; i++)
            {
                maxResults[i] = array.Max();
            }
            var maxEnd = DateTime.Now;

            for (int i = 0; i < maxResults.Length; i++)
            {
                linqResults[i] = array.OrderByDescending(it => it).First();
            }
            var linqEnd = DateTime.Now;

            // 00:00:00.0748281
            // 00:00:01.5321276
            Console.WriteLine(maxEnd - start);
            Console.WriteLine(linqEnd - maxEnd);
            Console.ReadKey();
        }
    }
}
c# linq linq-to-objects
1个回答
0
投票
for (int i = 0; i < maxResults.Length; i++) { linqResults[i] = array.OrderByDescending(it => it).First(); }

让我们做一次[[一次:

    // 10 top item of the array
    var linqResults = array
      .OrderByDescending(it => it)
      .Take(10)
      .ToArray(); 

请注意,

for (int i = 0; i < maxResults.Length; i++) { maxResults[i] = array.Max(); }
只需重复

相同

Max10次(它不返回10头项)
© www.soinside.com 2019 - 2024. All rights reserved.