Last active
December 29, 2016 20:46
-
-
Save zaqmor/9a0d0b8a60f10b4657fa9554068f41fc to your computer and use it in GitHub Desktop.
Yield_Versus_Linq_Tests.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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