Create ContinuationQueueCheck.cs

But it seems that benchmark not working finely
pull/150/head
Ram.Type-0 2020-08-30 13:42:40 +09:00
parent 4d554a6718
commit 0e3353500d
1 changed files with 282 additions and 0 deletions

View File

@ -0,0 +1,282 @@
using BenchmarkDotNet.Attributes;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net.WebSockets;
using System.Text;
namespace NetCoreSandbox
{
struct WrapedAction
{
Action action;
public WrapedAction(Action action)
{
this.action = action;
}
public void Invoke() => action.Invoke();
}
[Config(typeof(BenchmarkConfig))]
[CategoriesColumn]
public class ContinuationQueueCheck
{
const int actionListLength = 16;
Action[] actionList;
int actionListCount = actionListLength;
WrapedAction[] wrapedActionList;
int wrapedActionListCount = actionListLength;
[GlobalSetup]
public void Setup()
{
actionList = new Action[actionListLength];
for (int i = 0; i < actionList.Length; i++)
{
actionList[i] = () => { };
}
wrapedActionList = new WrapedAction[actionListLength];
for (int i = 0; i < wrapedActionList.Length; i++)
{
wrapedActionList[i] = new WrapedAction(() => { });
}
}
[Benchmark]
public void WithoutRef()
{
for (int i = 0; i < actionListCount; i++)
{
var action = actionList[i];
actionList[i] = default;
try
{
action.Invoke();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
}
[Benchmark]
public void WithoutRefNoBoundsCheck()
{
var actionList = this.actionList;
for (int i = 0; i < actionList.Length; i++)
{
var action = actionList[i];
actionList[i] = default;
try
{
action.Invoke();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
}
[Benchmark]
public void WithoutRefLocalListCount()
{
var actionList = this.actionList;
var count = Math.Min(actionList.Length, actionListCount);
for (int i = 0; i < count; i++)
{
var action = actionList[i];
actionList[i] = default;
try
{
action.Invoke();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
}
[Benchmark]
public void WithRef()
{
for (int i = 0; i < actionListCount; i++)
{
ref var action = ref actionList[i];
try
{
action.Invoke();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
action = default;
}
}
[Benchmark]
public void WithRefNoBoundsCheck()
{
var actionList = this.actionList;
for (int i = 0; i < actionList.Length; i++)
{
ref var action = ref actionList[i];
try
{
action.Invoke();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
action = default;
}
}
[Benchmark]
public void WithRefLocalListCount()
{
var actionList = this.actionList;
var count = Math.Min(actionList.Length, actionListCount);
for (int i = 0; i < count; i++)
{
ref var action = ref actionList[i];
try
{
action.Invoke();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
action = default;
}
}
[Benchmark]
public void WithoutRefWraped()
{
for (int i = 0; i < wrapedActionListCount; i++)
{
var wrapedAction = wrapedActionList[i];
wrapedActionList[i] = default;
try
{
wrapedAction.Invoke();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
}
[Benchmark]
public void WithoutRefNoBoundsCheckWraped()
{
var wrapedActionList = this.wrapedActionList;
for (int i = 0; i < wrapedActionList.Length; i++)
{
var wrapedAction = wrapedActionList[i];
wrapedActionList[i] = default;
try
{
wrapedAction.Invoke();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
}
[Benchmark]
public void WithoutRefLocalListCountWraped()
{
var wrapedActionList = this.wrapedActionList;
var count = Math.Min(wrapedActionList.Length, wrapedActionListCount);
for (int i = 0; i < count; i++)
{
var wrapedAction = wrapedActionList[i];
wrapedActionList[i] = default;
try
{
wrapedAction.Invoke();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
}
[Benchmark]
public void WithRefWraped()
{
for (int i = 0; i < wrapedActionListCount; i++)
{
ref var wrapedAction = ref wrapedActionList[i];
try
{
wrapedAction.Invoke();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
wrapedAction = default;
}
}
[Benchmark]
public void WithRefNoBoundsCheckWraped()
{
var wrapedActionList = this.wrapedActionList;
for (int i = 0; i < wrapedActionList.Length; i++)
{
ref var wrapedAction = ref wrapedActionList[i];
try
{
wrapedAction.Invoke();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
wrapedAction = default;
}
}
[Benchmark]
public void WithRefLocalListCountWraped()
{
var wrapedActionList = this.wrapedActionList;
var count = Math.Min(wrapedActionList.Length, wrapedActionListCount);
for (int i = 0; i < count; i++)
{
ref var wrapedAction = ref wrapedActionList[i];
try
{
wrapedAction.Invoke();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
wrapedAction = default;
}
}
}
}