Skip to content

Instantly share code, notes, and snippets.

@zaqmor
Last active December 29, 2016 20:46
Show Gist options
  • Save zaqmor/9a0d0b8a60f10b4657fa9554068f41fc to your computer and use it in GitHub Desktop.
Save zaqmor/9a0d0b8a60f10b4657fa9554068f41fc to your computer and use it in GitHub Desktop.
Yield_Versus_Linq_Tests.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using NUnit.Framework;
[TestFixture]
public class Yield_Versus_Linq_Tests
{
[Test]
public void Yield_Is_Slower_Than_Select()
{
var numbers = Enumerable.Range(1, 1000000);
var yieldElapsed = GetElapsed(numbers, GetYieldCalculations);
var selectElapsed = GetElapsed(numbers, GetSelectCalculations);
Assert.IsTrue(yieldElapsed > selectElapsed);
}
private static TimeSpan GetElapsed(IEnumerable<int> numbers, Func<IEnumerable<int>, IEnumerable<double>> operation)
{
var timer = new Stopwatch();
timer.Start();
var results = operation(numbers).ToList();
timer.Stop();
return timer.Elapsed;
}
private static IEnumerable<double> GetYieldCalculations(IEnumerable<int> numbers)
{
foreach (var number in numbers)
{
yield return Math.Sqrt(number);
}
}
private static IEnumerable<double> GetSelectCalculations(IEnumerable<int> numbers)
{
return numbers.Select(number => Math.Sqrt(number));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment