Adds back in old benchmarks. Cleans up tests. (#270)
This commit is contained in:
parent
09d80916b8
commit
4e799ddbd7
29 changed files with 498 additions and 160 deletions
90
Projects/Benchmarks/FeatureFlags/BenchmarkFeatureFlags.cs
Normal file
90
Projects/Benchmarks/FeatureFlags/BenchmarkFeatureFlags.cs
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
using System;
|
||||
using System.Buffers.Binary;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Runtime.Loader;
|
||||
using System.Security.Cryptography;
|
||||
using BenchmarkDotNet.Attributes;
|
||||
using BenchmarkDotNet.Jobs;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Benchmarks
|
||||
{
|
||||
[SimpleJob(RuntimeMoniker.NetCoreApp31)]
|
||||
public class BenchmarkFeatureFlags
|
||||
{
|
||||
public Dictionary<Type, FeatureFlag<Item>> m_Dictionary;
|
||||
public ILookup<Type, FeatureFlag<Item>> m_Lookup;
|
||||
|
||||
public Type[] m_TypesToLookUp;
|
||||
|
||||
[GlobalSetup]
|
||||
public void Setup()
|
||||
{
|
||||
RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();
|
||||
|
||||
string file = Path.Join(AppDomain.CurrentDomain.BaseDirectory, "UOContent.dll");
|
||||
Assembly assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(file);
|
||||
|
||||
m_Dictionary = new Dictionary<Type, FeatureFlag<Item>>();
|
||||
List<FeatureFlag<Item>> m_Types = new List<FeatureFlag<Item>>();
|
||||
m_TypesToLookUp = new Type[100];
|
||||
|
||||
foreach (var type in assembly.GetTypes())
|
||||
{
|
||||
if (typeof(Item).IsAssignableFrom(type))
|
||||
{
|
||||
m_Dictionary.Add(type, new FeatureFlag<Item>());
|
||||
m_Types.Add(new FeatureFlag<Item>{Type = type});
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine("Dictionary Size: {0}", m_Dictionary.Count);
|
||||
Console.WriteLine("Lookup Size: {0}", m_Types.Count);
|
||||
|
||||
m_Dictionary.TrimExcess();
|
||||
m_Lookup = m_Types.ToLookup(f => f.Type);
|
||||
Span<byte> bytes = stackalloc byte[4];
|
||||
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
csp.GetBytes(bytes);
|
||||
m_TypesToLookUp[i] = m_Types[(int)(BinaryPrimitives.ReadUInt32BigEndian(bytes) % m_Types.Count)].Type;
|
||||
}
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public FeatureFlag<Item> TestDictionary()
|
||||
{
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
m_Dictionary.TryGetValue(typeof(ExplosionPotion), out var ff);
|
||||
if (i == 99)
|
||||
{
|
||||
return ff;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public FeatureFlag<Item> TestLookup()
|
||||
{
|
||||
FeatureFlag<Item> ff;
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
ff = m_Lookup[typeof(ExplosionPotion)].GetEnumerator().Current;
|
||||
if (i == 99)
|
||||
{
|
||||
return ff;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue