using System;
using System.Linq;
using System.Collections.Generic;
using System.Diagnostics;
public class Test
{
public static void Main()
{
var sw = new Stopwatch();
int many = 10000000;
var manyDoubles = new List<double>(many);
var range = Enumerable.Range(1, many).Select(i => (double)i);
var orderFirst = manyDoubles.OrderBy(d => d).Distinct();
sw.Start();
manyDoubles.AddRange(orderFirst);
sw.Stop();
Console.WriteLine("Time for first orderby then distinct: {0}", sw.Elapsed.ToString());
manyDoubles = new List<double>(many);
var distinctFirst = manyDoubles.Distinct().OrderBy(d => d);
sw.Reset();
sw.Start();
manyDoubles.AddRange(distinctFirst);
sw.Stop();
Console.WriteLine("Time for first distinct then orderby: {0}", sw.Elapsed.ToString());
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CnVzaW5nIFN5c3RlbS5EaWFnbm9zdGljczsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQl2YXIgc3cgPSBuZXcgU3RvcHdhdGNoKCk7CiAgICAgICAgICAgICAgICBpbnQgbWFueSA9IDEwMDAwMDAwOwogICAgICAgICAgICAgICAgdmFyIG1hbnlEb3VibGVzID0gbmV3IExpc3Q8ZG91YmxlPihtYW55KTsKICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IEVudW1lcmFibGUuUmFuZ2UoMSwgbWFueSkuU2VsZWN0KGkgPT4gKGRvdWJsZSlpKTsKICAgICAgICAgICAgICAgIAoJCXZhciBvcmRlckZpcnN0ID0gbWFueURvdWJsZXMuT3JkZXJCeShkID0+IGQpLkRpc3RpbmN0KCk7CiAgICAgICAgICAgICAgICBzdy5TdGFydCgpOwogICAgICAgICAgICAgICAgbWFueURvdWJsZXMuQWRkUmFuZ2Uob3JkZXJGaXJzdCk7CiAgICAgICAgICAgICAgICBzdy5TdG9wKCk7CiAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiVGltZSBmb3IgZmlyc3Qgb3JkZXJieSB0aGVuIGRpc3RpbmN0OiB7MH0iLCBzdy5FbGFwc2VkLlRvU3RyaW5nKCkpOwoJCW1hbnlEb3VibGVzID0gbmV3IExpc3Q8ZG91YmxlPihtYW55KTsKICAgICAgICAgICAgICAgIAoJCXZhciBkaXN0aW5jdEZpcnN0ID0gbWFueURvdWJsZXMuRGlzdGluY3QoKS5PcmRlckJ5KGQgPT4gZCk7CiAgICAgICAgICAgICAgICBzdy5SZXNldCgpOwogICAgICAgICAgICAgICAJc3cuU3RhcnQoKTsKICAgICAgICAgICAgICAgIG1hbnlEb3VibGVzLkFkZFJhbmdlKGRpc3RpbmN0Rmlyc3QpOwogICAgICAgICAgICAgICAgc3cuU3RvcCgpOwogICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIlRpbWUgZm9yIGZpcnN0IGRpc3RpbmN0IHRoZW4gb3JkZXJieTogezB9Iiwgc3cuRWxhcHNlZC5Ub1N0cmluZygpKTsKCX0KfQ==