KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I've been having trouble with understanding the performance characteristics of using Func<...> throughout my code when using inheritance and generics - which is a combination I find myself using all the time. Let me start with a minimal test case so we all know what we're talking about, then I'll post the results and then I'm going to explain what I would expect and why... Minimal test case public class GenericsTest2 : GenericsTest<int> { static void Main(string[] args) { GenericsTest2 at = new GenericsTest2(); at.test(at.func); at.test(at.Check); at.test(at.func2); at.test(at.Check2); at.test((a) => a.Equals(default(int))); Console.ReadLine(); } public GenericsTest2() { func = func2 = (a) => Check(a); } protected Func<int, bool> func2; public bool Check2(int value) { return value.Equals(default(int)); } public void test(Func<int, bool> func) { using (Stopwatch sw = new Stopwatch((ts) => { Console.WriteLine("Took {0:0.00}s", ts.TotalSeconds); })) { for (int i = 0; i < 100000000; ++i) { func(i); } } } } public class GenericsTest<T> { public bool Check(T value) { return value.Equals(default(T)); } protected Func<T, bool> func; } public class Stopwatch : IDisposable { public Stopwatch(Action<TimeSpan> act) { this.act = act; this.start = DateTime.UtcNow; } private Action<TimeSpan> act; private DateTime start; public void Dispose() { act(DateTime.UtcNow.Subtract(start)); } } The results Took 2.50s -> at.test(at.func); Took 1.97s -> at.test(at.Check); Took 2.48s -> at.test(at.func2); Took 0.72s ->
Tags (comma-separated)
Save Edits
Cancel