更新- 对于那些有幽默感的人,您可以假设 Aggregate 仍然会产生正常结果,无论传递给它的函数是什么,包括在被优化的情况下。
我编写了这个程序来构建一长串从 0 到 19999 的整数,用逗号分隔。
using System;
using System.Linq;
using System.Diagnostics;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
const int size = 20000;
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
Enumerable.Range(0, size).Select(n => n.ToString()).Aggregate((a, b) => a + ", " + b);
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds + "ms");
}
}
}
当我运行它时,它说:
5116ms
超过五秒,太可怕了。当然这是因为每次循环都会复制整个字符串。
但是,如果做出评论中指出的一个非常小的改变呢?
using System;
using System.Linq;
using System.Diagnostics;
namespace ConsoleApplication5
{
using MakeAggregateGoFaster; // <---- inserted this
class Program
{
static void Main(string[] args)
{
const int size = 20000;
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
Enumerable.Range(0, size).Select(n => n.ToString()).Aggregate((a, b) => a + ", " + b);
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds + "ms");
}
}
}
现在当我运行它时,它说:
42ms
速度提高 100 倍以上。
问题
MakeAggregateGoFaster 命名空间中有什么?
更新 2: 在这里写下我的答案。