KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I was attempting to compare three different ways of passing a delegate to a function in C# -- by lambda, by delegate, and by direct reference. What really surprised me was the direct reference method (i.e. ComputeStringFunctionViaFunc(object[i].ToString)) was six times slower than the other methods. Does anyone know why this is? The complete code is as below: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.CompilerServices; namespace FunctionInvocationTest { class Program { static void Main(string[] args) { object[] objectArray = new object[10000000]; for (int i = 0; i < objectArray.Length; ++i) { objectArray[i] = new object(); } ComputeStringFunction(objectArray[0]); ComputeStringFunctionViaFunc(objectArray[0].ToString); ComputeStringFunctionViaFunc(delegate() { return objectArray[0].ToString(); }); ComputeStringFunctionViaFunc(() => objectArray[0].ToString()); System.Diagnostics.Stopwatch s = new System.Diagnostics.Stopwatch(); s.Start(); for (int i = 0; i < objectArray.Length; ++i) { ComputeStringFunction(objectArray[i]); } s.Stop(); Console.WriteLine(s.Elapsed.TotalMilliseconds); s.Reset(); s.Start(); for (int i = 0; i < objectArray.Length; ++i) { ComputeStringFunctionViaFunc(delegate() { return objectArray[i].ToString(); }); } s.Stop(); Console.WriteLine(s.Elapsed.TotalMilliseconds); s.Reset(); s.Start(); for (int i = 0; i < objectArray.Length; ++i) { ComputeStringFunctionViaFunc(objectArray[i].ToString); } s.Stop(); Console.WriteLine(s.Elapsed.TotalMill
Tags (comma-separated)
Save Edits
Cancel