[TestMethod] public unsafe void Callback() { const uint iterations = 2048 * 2048; using (var test = new CallbackTest()) { Trace.WriteLine(iterations.ToString("N0") + " iterations"); // jit CallbackTest.MakeNoop(0)(); test.CallViaThunk(CallbackTest.MakeNoop(0)); test.CallViaGchandle(CallbackTest.MakeNoop(0)); var timer = Stopwatch.StartNew(); for (uint i = 0; i < iterations; ++i) { CallbackTest.MakeNoop(i)(); } timer.Stop(); Display(timer, "bare call"); timer.Reset(); timer.Start(); for (uint i = 0; i < iterations; ++i) { test.CallViaThunk(CallbackTest.MakeNoop(i)); } timer.Stop(); Display(timer, "CallViaThunk"); timer.Reset(); timer.Start(); for (uint i = 0; i < iterations; ++i) { test.CallViaGchandle(CallbackTest.MakeNoop(i)); } timer.Stop(); Display(timer, "CallViaGchandle"); /* * 4,194,304 iterations * bare call: 51ms * CallViaThunk: 4468ms * CallViaGchandle: 1911ms */ } }
// Use this for initialization void Start() { Instance = this; }
// Use this for initialization void Start() { callbackTest = GetComponent <CallbackTest>(); }