From e226c96f05ffb801a131e9ebedc317eeb45cc32b Mon Sep 17 00:00:00 2001 From: Eugene Levchenkov Date: Sat, 2 May 2026 23:07:34 +0300 Subject: [PATCH 1/2] Add PewPew.Ecs library --- source/Ecs.CSharp.Benchmark/Categories.cs | 1 + .../Contexts/PewPewEcsBaseContext.cs | 49 +++++++ .../CreateEntityWithOneComponent/PewPewEcs.cs | 27 ++++ .../PewPewEcs.cs | 29 ++++ .../PewPewEcs.cs | 29 ++++ .../Ecs.CSharp.Benchmark.csproj | 11 +- .../SystemWithOneComponent/PewPewEcs.cs | 77 ++++++++++ .../SystemWithThreeComponents/PewPewEcs.cs | 131 ++++++++++++++++++ .../SystemWithTwoComponents/PewPewEcs.cs | 122 ++++++++++++++++ .../PewPewEcs.cs | 90 ++++++++++++ 10 files changed, 561 insertions(+), 5 deletions(-) create mode 100644 source/Ecs.CSharp.Benchmark/Contexts/PewPewEcsBaseContext.cs create mode 100644 source/Ecs.CSharp.Benchmark/CreateEntityWithOneComponent/PewPewEcs.cs create mode 100644 source/Ecs.CSharp.Benchmark/CreateEntityWithThreeComponents/PewPewEcs.cs create mode 100644 source/Ecs.CSharp.Benchmark/CreateEntityWithTwoComponents/PewPewEcs.cs create mode 100644 source/Ecs.CSharp.Benchmark/SystemWithOneComponent/PewPewEcs.cs create mode 100644 source/Ecs.CSharp.Benchmark/SystemWithThreeComponents/PewPewEcs.cs create mode 100644 source/Ecs.CSharp.Benchmark/SystemWithTwoComponents/PewPewEcs.cs create mode 100644 source/Ecs.CSharp.Benchmark/SystemWithTwoComponentsMultipleComposition/PewPewEcs.cs diff --git a/source/Ecs.CSharp.Benchmark/Categories.cs b/source/Ecs.CSharp.Benchmark/Categories.cs index 193c851..f07517a 100644 --- a/source/Ecs.CSharp.Benchmark/Categories.cs +++ b/source/Ecs.CSharp.Benchmark/Categories.cs @@ -11,6 +11,7 @@ internal static class Categories public const string LeopotamEcsLite = "Leopotam.EcsLite"; public const string MonoGameExtended = "MonoGame.Extended"; public const string Myriad = "Myriad.ECS"; + public const string PewPewEcs = "PewPew.Ecs"; public const string RelEcs = "RelEcs"; public const string SveltoECS = "Svelto.ECS"; public const string Morpeh = "Morpeh"; diff --git a/source/Ecs.CSharp.Benchmark/Contexts/PewPewEcsBaseContext.cs b/source/Ecs.CSharp.Benchmark/Contexts/PewPewEcsBaseContext.cs new file mode 100644 index 0000000..6a33c09 --- /dev/null +++ b/source/Ecs.CSharp.Benchmark/Contexts/PewPewEcsBaseContext.cs @@ -0,0 +1,49 @@ +using System; +using PewPew.Ecs.Core; +using PewPew.Ecs.Hybrid; + +namespace Ecs.CSharp.Benchmark +{ + public struct PPComponent1 : IComponent + { + public int Value; + } + + public struct PPComponent2 : IComponent + { + public int Value; + } + + public struct PPComponent3 : IComponent + { + public int Value; + } +} + +namespace Ecs.CSharp.Benchmark.Contexts +{ + + public class PewPewEcsBaseContext : IDisposable + { + public HybridWorld HybridWorld { get; } + + public PewPewEcsBaseContext() + { + + } + + public PewPewEcsBaseContext(int entityCount) + { + HybridWorld = WorldFactory.Shared.CreateHybridWorld(c => c.MaxEntitiesCount = entityCount); + } + + public PewPewEcsBaseContext(int entityCount, int entityPadding) + { + HybridWorld = WorldFactory.Shared.CreateHybridWorld(c => c.MaxEntitiesCount = entityCount * entityPadding + entityCount); + } + + public virtual void Dispose() + { + } + } +} diff --git a/source/Ecs.CSharp.Benchmark/CreateEntityWithOneComponent/PewPewEcs.cs b/source/Ecs.CSharp.Benchmark/CreateEntityWithOneComponent/PewPewEcs.cs new file mode 100644 index 0000000..5b4afa4 --- /dev/null +++ b/source/Ecs.CSharp.Benchmark/CreateEntityWithOneComponent/PewPewEcs.cs @@ -0,0 +1,27 @@ +using BenchmarkDotNet.Attributes; +using Ecs.CSharp.Benchmark.Contexts; +using PewPew.Ecs.Core; +using PewPew.Ecs.Hybrid; + +namespace Ecs.CSharp.Benchmark +{ + public partial class CreateEntityWithOneComponent + { + [Context] + private readonly PewPewEcsBaseContext _pewEcsBaseContext; + + [BenchmarkCategory(Categories.PewPewEcs)] + [Benchmark] + public void PewPewEcs() + { + HybridWorld world = WorldFactory.Shared.CreateHybridWorld(c => c.MaxEntitiesCount = EntityCount); + world.InitComponent(); + + for (int i = 0; i < EntityCount; ++i) + { + EntityId entityId = world.CreateEntityId(); + world.AddComponent(entityId); + } + } + } +} diff --git a/source/Ecs.CSharp.Benchmark/CreateEntityWithThreeComponents/PewPewEcs.cs b/source/Ecs.CSharp.Benchmark/CreateEntityWithThreeComponents/PewPewEcs.cs new file mode 100644 index 0000000..863f99f --- /dev/null +++ b/source/Ecs.CSharp.Benchmark/CreateEntityWithThreeComponents/PewPewEcs.cs @@ -0,0 +1,29 @@ +using BenchmarkDotNet.Attributes; +using Ecs.CSharp.Benchmark.Contexts; +using PewPew.Ecs.Core; +using PewPew.Ecs.Hybrid; + +namespace Ecs.CSharp.Benchmark +{ + public partial class CreateEntityWithThreeComponents + { + [Context] + private readonly PewPewEcsBaseContext _pewEcsBaseContext; + + [BenchmarkCategory(Categories.PewPewEcs)] + [Benchmark] + public void PewPewEcs() + { + HybridWorld world = WorldFactory.Shared.CreateHybridWorld(c => c.MaxEntitiesCount = EntityCount); + world.InitStaticArchetype(); + + var archetype = world.GetStaticArchetype(); + + for (int i = 0; i < EntityCount; ++i) + { + EntityId entityId = world.CreateEntityId(); + archetype.Create(entityId); + } + } + } +} diff --git a/source/Ecs.CSharp.Benchmark/CreateEntityWithTwoComponents/PewPewEcs.cs b/source/Ecs.CSharp.Benchmark/CreateEntityWithTwoComponents/PewPewEcs.cs new file mode 100644 index 0000000..9c93578 --- /dev/null +++ b/source/Ecs.CSharp.Benchmark/CreateEntityWithTwoComponents/PewPewEcs.cs @@ -0,0 +1,29 @@ +using BenchmarkDotNet.Attributes; +using Ecs.CSharp.Benchmark.Contexts; +using PewPew.Ecs.Core; +using PewPew.Ecs.Hybrid; + +namespace Ecs.CSharp.Benchmark +{ + public partial class CreateEntityWithTwoComponents + { + [Context] + private readonly PewPewEcsBaseContext _pewEcsBaseContext; + + [BenchmarkCategory(Categories.PewPewEcs)] + [Benchmark] + public void PewPewEcs() + { + HybridWorld world = WorldFactory.Shared.CreateHybridWorld(c => c.MaxEntitiesCount = EntityCount); + world.InitStaticArchetype(); + + var archetype = world.GetStaticArchetype(); + + for (int i = 0; i < EntityCount; ++i) + { + EntityId entityId = world.CreateEntityId(); + archetype.Create(entityId); + } + } + } +} diff --git a/source/Ecs.CSharp.Benchmark/Ecs.CSharp.Benchmark.csproj b/source/Ecs.CSharp.Benchmark/Ecs.CSharp.Benchmark.csproj index 9333f00..ea4bf04 100644 --- a/source/Ecs.CSharp.Benchmark/Ecs.CSharp.Benchmark.csproj +++ b/source/Ecs.CSharp.Benchmark/Ecs.CSharp.Benchmark.csproj @@ -1,5 +1,5 @@  - + latest net8.0 @@ -12,7 +12,7 @@ true true $(NoWarn);NETSDK1206 - + CHECK_CACHE_MISSES @@ -21,6 +21,7 @@ + @@ -38,11 +39,11 @@ - + - + @@ -58,5 +59,5 @@ - + \ No newline at end of file diff --git a/source/Ecs.CSharp.Benchmark/SystemWithOneComponent/PewPewEcs.cs b/source/Ecs.CSharp.Benchmark/SystemWithOneComponent/PewPewEcs.cs new file mode 100644 index 0000000..16edc8f --- /dev/null +++ b/source/Ecs.CSharp.Benchmark/SystemWithOneComponent/PewPewEcs.cs @@ -0,0 +1,77 @@ +using System; +using System.Numerics; +using System.Runtime.InteropServices; +using BenchmarkDotNet.Attributes; +using Ecs.CSharp.Benchmark.Contexts; +using PewPew.Ecs.Core; +using PewPew.Ecs.Hybrid; + +namespace Ecs.CSharp.Benchmark +{ + public partial class SystemWithOneComponent + { + [Context] + private readonly PewPewEcsContext _pewPewEcsContext; + + [BenchmarkCategory(Categories.PewPewEcs)] + [Benchmark] + public void PewPewEcs() => + _pewPewEcsContext.HybridWorld.ExecuteQueryWithoutId(_pewPewEcsContext.Query); + + [BenchmarkCategory(Categories.PewPewEcs)] + [Benchmark] + public void PewPewEcs_Simd() => + _pewPewEcsContext.HybridWorld.ExecuteBatchQuery(_pewPewEcsContext.BatchQuery); + + private sealed class PewPewEcsContext : PewPewEcsBaseContext + { + public OneComponentsQuery Query; + public OneComponentsBatchQuery BatchQuery; + + public PewPewEcsContext(int entityCount, int entityPadding) : base(entityCount, entityPadding) + { + Query = default; + + HybridWorld.InitComponent(); + + for (int i = 0; i < entityCount; ++i) + { + for (int j = 0; j < entityPadding; ++j) + { + HybridWorld.CreateEntityId(); + } + + EntityId entityId = HybridWorld.CreateEntityId(); + HybridWorld.AddComponent(entityId); + } + } + } + + public struct OneComponentsQuery : IQueryWithoutId + { + public void Update(ref PPComponent1 component1) + { + ++component1.Value; + } + } + + public struct OneComponentsBatchQuery : IBatchQuery + { + public void BatchUpdate(Span component1) + { + int vectorCount = Vector.Count; // 8 + int length = component1.Length - (component1.Length % vectorCount); + + Span> vectors1 = MemoryMarshal.Cast>(component1.Slice(0, length)); + + for (int i = 0; i < vectors1.Length; i++) + vectors1[i] += Vector.One; + + for (int i = length; i < component1.Length; i++) + component1[i].Value++; + } + + public void SparseUpdate(ref PPComponent1 component1) => ++component1.Value; + } + } +} diff --git a/source/Ecs.CSharp.Benchmark/SystemWithThreeComponents/PewPewEcs.cs b/source/Ecs.CSharp.Benchmark/SystemWithThreeComponents/PewPewEcs.cs new file mode 100644 index 0000000..bf8ea31 --- /dev/null +++ b/source/Ecs.CSharp.Benchmark/SystemWithThreeComponents/PewPewEcs.cs @@ -0,0 +1,131 @@ +using System; +using System.Numerics; +using System.Runtime.InteropServices; +using BenchmarkDotNet.Attributes; +using Ecs.CSharp.Benchmark.Contexts; +using PewPew.Ecs.Core; +using PewPew.Ecs.Filters; +using PewPew.Ecs.Hybrid; + +namespace Ecs.CSharp.Benchmark +{ + public partial class SystemWithThreeComponents + { + [Context] + private readonly PewPewEcsContext _pewPewEcsContext; + + [BenchmarkCategory(Categories.PewPewEcs)] + [Benchmark] + public void PewPewEcs() => + _pewPewEcsContext.HybridWorld.ExecuteQueryWithoutId( + _pewPewEcsContext.FilterDefinition, + _pewPewEcsContext.Query); + + [BenchmarkCategory(Categories.PewPewEcs)] + [Benchmark] + public void PewPewEcs_Simd() => + _pewPewEcsContext.HybridWorld.ExecuteBatchQuery( + _pewPewEcsContext.FilterDefinition, + _pewPewEcsContext.BatchQuery); + + private sealed class PewPewEcsContext : PewPewEcsBaseContext + { + public FilterDefinition FilterDefinition; + + public ThreeComponentsQuery Query; + public ThreeComponentsBatchQuery BatchQuery; + + public PewPewEcsContext(int entityCount, int entityPadding) : base(entityCount, entityPadding) + { + HybridWorld.InitThreeComponentArchetype(); + + Query = default; + BatchQuery = default; + + FilterDefinition = new FilterDefinition() + .With() + .With() + .With(); + + ThreeComponentArchetype archetype = HybridWorld.GetThreeComponentArchetype(); + + for (int i = 0; i < entityCount; ++i) + { + for (int j = 0; j < entityPadding; ++j) + { + EntityId paddingEntityId = HybridWorld.CreateEntityId(); + switch (j % 3) + { + case 0: + HybridWorld.AddComponent(paddingEntityId); + break; + + case 1: + HybridWorld.AddComponent(paddingEntityId); + break; + + case 2: + HybridWorld.AddComponent(paddingEntityId); + break; + } + } + + EntityId entityId = HybridWorld.CreateEntityId(); + + ThreeComponent components = archetype.Add(entityId); + components.Component1 = new PPComponent1 { Value = 0 }; + components.Component2 = new PPComponent2 { Value = 1 }; + components.Component3 = new PPComponent3 { Value = 1 }; + } + } + } + } + + [PewPew.Ecs.Hybrid.Archetype] + public ref struct ThreeComponent + { + public ref PPComponent1 Component1; + public ref PPComponent2 Component2; + public ref PPComponent3 Component3; + + public ThreeComponent(ref PPComponent1 component1, ref PPComponent2 component2, ref PPComponent3 component3) + { + Component1 = ref component1; + Component2 = ref component2; + Component3 = ref component3; + } + } + + public struct ThreeComponentsQuery : IQueryWithoutId + { + public void Update(ref PPComponent1 component1, ref PPComponent2 component2, ref PPComponent3 component3) + { + component1.Value += component2.Value + component3.Value; + } + } + + public struct ThreeComponentsBatchQuery : IBatchQuery + { + public void BatchUpdate(Span component1, Span component2, Span component3) + { + int vectorCount = Vector.Count; // 8 + int length = component1.Length - (component1.Length % vectorCount); + + Span> vectors1 = MemoryMarshal.Cast>(component1.Slice(0, length)); + Span> vectors2 = MemoryMarshal.Cast>(component2.Slice(0, length)); + Span> vectors3 = MemoryMarshal.Cast>(component3.Slice(0, length)); + + for (int i = 0; i < vectors1.Length; i++) + vectors1[i] += vectors2[i] + vectors3[i]; + + for (int i = length; i < component1.Length; i++) + component1[i].Value += component2[i].Value + component3[i].Value; + } + + public void SparseUpdate(ref PPComponent1 component1, ref PPComponent2 component2, ref PPComponent3 component3) + { + component1.Value += component2.Value + component3.Value; + } + } + +} diff --git a/source/Ecs.CSharp.Benchmark/SystemWithTwoComponents/PewPewEcs.cs b/source/Ecs.CSharp.Benchmark/SystemWithTwoComponents/PewPewEcs.cs new file mode 100644 index 0000000..db62e59 --- /dev/null +++ b/source/Ecs.CSharp.Benchmark/SystemWithTwoComponents/PewPewEcs.cs @@ -0,0 +1,122 @@ +using System; +using System.Numerics; +using System.Runtime.InteropServices; +using BenchmarkDotNet.Attributes; +using Ecs.CSharp.Benchmark.Contexts; +using PewPew.Ecs.Core; +using PewPew.Ecs.Filters; +using PewPew.Ecs.Hybrid; + +namespace Ecs.CSharp.Benchmark +{ + public partial class SystemWithTwoComponents + { + [Context] + private readonly PewPewEcsContext _pewPewEcsContext; + + [BenchmarkCategory(Categories.PewPewEcs)] + [Benchmark] + public void PewPewEcs() => + _pewPewEcsContext.HybridWorld.ExecuteQueryWithoutId( + _pewPewEcsContext.FilterDefinition, + _pewPewEcsContext.Query); + + [BenchmarkCategory(Categories.PewPewEcs)] + [Benchmark] + public void PewPewEcs_Simd() => + _pewPewEcsContext.HybridWorld.ExecuteBatchQuery( + _pewPewEcsContext.FilterDefinition, + _pewPewEcsContext.BatchQuery); + + private sealed class PewPewEcsContext : PewPewEcsBaseContext + { + public FilterDefinition FilterDefinition; + + public TwoComponentsQuery Query; + public TwoComponentsBatchQuery BatchQuery; + + public PewPewEcsContext(int entityCount, int entityPadding) : base(entityCount, entityPadding) + { + HybridWorld.InitTwoComponentArchetype(); + + Query = default; + BatchQuery = default; + + FilterDefinition = new FilterDefinition() + .With() + .With(); + + TwoComponentArchetype archetype = HybridWorld.GetTwoComponentArchetype(); + + for (int i = 0; i < entityCount; ++i) + { + for (int j = 0; j < entityPadding; ++j) + { + EntityId paddingEntityId = HybridWorld.CreateEntityId(); + switch (j % 2) + { + case 0: + HybridWorld.AddComponent(paddingEntityId); + break; + + case 1: + HybridWorld.AddComponent(paddingEntityId); + break; + } + } + + EntityId entityId = HybridWorld.CreateEntityId(); + + TwoComponent components = archetype.Add(entityId); + components.Component1 = new PPComponent1 { Value = 0 }; + components.Component2 = new PPComponent2 { Value = 1 }; + } + } + } + } + + [PewPew.Ecs.Hybrid.Archetype] + public ref struct TwoComponent + { + public ref PPComponent1 Component1; + public ref PPComponent2 Component2; + + public TwoComponent(ref PPComponent1 component1, ref PPComponent2 component2) + { + Component1 = ref component1; + Component2 = ref component2; + } + } + + public struct TwoComponentsQuery : IQueryWithoutId + { + public void Update(ref PPComponent1 component1, ref PPComponent2 component2) + { + component1.Value += component2.Value; + } + } + + public struct TwoComponentsBatchQuery : IBatchQuery + { + public void BatchUpdate(Span component1, Span component2) + { + int vectorCount = Vector.Count; // 8 + int length = component1.Length - (component1.Length % vectorCount); + + Span> vectors1 = MemoryMarshal.Cast>(component1.Slice(0, length)); + Span> vectors2 = MemoryMarshal.Cast>(component2.Slice(0, length)); + + for (int i = 0; i < vectors1.Length; i++) + vectors1[i] += vectors2[i]; + + for (int i = length; i < component1.Length; i++) + component1[i].Value += component2[i].Value; + } + + public void SparseUpdate(ref PPComponent1 component1, ref PPComponent2 component2) + { + component1.Value += component2.Value; + } + } + +} diff --git a/source/Ecs.CSharp.Benchmark/SystemWithTwoComponentsMultipleComposition/PewPewEcs.cs b/source/Ecs.CSharp.Benchmark/SystemWithTwoComponentsMultipleComposition/PewPewEcs.cs new file mode 100644 index 0000000..6d7ead8 --- /dev/null +++ b/source/Ecs.CSharp.Benchmark/SystemWithTwoComponentsMultipleComposition/PewPewEcs.cs @@ -0,0 +1,90 @@ +using BenchmarkDotNet.Attributes; +using Ecs.CSharp.Benchmark.Contexts; +using PewPew.Ecs.Core; +using PewPew.Ecs.Filters; +using PewPew.Ecs.Hybrid; +using IComponent = PewPew.Ecs.Core.IComponent; + +namespace Ecs.CSharp.Benchmark +{ + public partial class SystemWithTwoComponentsMultipleComposition + { + [Context] + private readonly PewPewEcsContext _pewPewEcsContext; + + [BenchmarkCategory(Categories.PewPewEcs)] + [Benchmark] + public void PewPewEcs() => + _pewPewEcsContext.HybridWorld.ExecuteQueryWithoutId( + _pewPewEcsContext.FilterDefinition, + _pewPewEcsContext.Query); + + [BenchmarkCategory(Categories.PewPewEcs)] + [Benchmark] + public void PewPewEcs_Simd() => + _pewPewEcsContext.HybridWorld.ExecuteBatchQuery( + _pewPewEcsContext.FilterDefinition, + _pewPewEcsContext.BatchQuery); + + private sealed class PewPewEcsContext : PewPewEcsBaseContext + { + public FilterDefinition FilterDefinition; + + public TwoComponentsQuery Query; + public TwoComponentsBatchQuery BatchQuery; + + public PewPewEcsContext(int entityCount) : base(entityCount) + { + HybridWorld.InitStaticArchetype(); + HybridWorld.InitStaticArchetype(); + HybridWorld.InitStaticArchetype(); + HybridWorld.InitStaticArchetype(); + + Query = default; + BatchQuery = default; + + FilterDefinition = new FilterDefinition() + .With() + .With(); + + var staticArchetype1 = HybridWorld.GetStaticArchetype(); + var staticArchetype2 = HybridWorld.GetStaticArchetype(); + var staticArchetype3 = HybridWorld.GetStaticArchetype(); + var staticArchetype4 = HybridWorld.GetStaticArchetype(); + + for (int i = 0; i < entityCount; ++i) + { + EntityId entityId = HybridWorld.CreateEntityId(); + + switch (i % 4) + { + case 0: + staticArchetype1.Add(entityId, new PPComponent1 { Value = 0 }, new PPComponent2 { Value = 1 }, new Padding1()); + break; + + case 1: + staticArchetype2.Add(entityId, new PPComponent1 { Value = 0 }, new PPComponent2 { Value = 1 }, new Padding2()); + break; + + case 2: + staticArchetype3.Add(entityId, new PPComponent1 { Value = 0 }, new PPComponent2 { Value = 1 }, new Padding3()); + break; + + case 3: + staticArchetype4.Add(entityId, new PPComponent1 { Value = 0 }, new PPComponent2 { Value = 1 }, new Padding4()); + break; + } + } + } + + private record struct Padding1() : IComponent; + + private record struct Padding2() : IComponent; + + private record struct Padding3() : IComponent; + + private record struct Padding4() : IComponent; + } + } + +} From be5b2d872e29f94a24650923e19c8f4f1aff5dc9 Mon Sep 17 00:00:00 2001 From: Eugene Levchenkov Date: Fri, 22 May 2026 21:21:30 +0300 Subject: [PATCH 2/2] Fix warnings for PewPewEcs --- .../Ecs.CSharp.Benchmark/Contexts/PewPewEcsBaseContext.cs | 6 +----- .../CreateEntityWithOneComponent/PewPewEcs.cs | 3 --- .../CreateEntityWithThreeComponents/PewPewEcs.cs | 3 --- .../CreateEntityWithTwoComponents/PewPewEcs.cs | 3 --- source/Ecs.CSharp.Benchmark/Ecs.CSharp.Benchmark.csproj | 5 +++-- .../SystemWithOneComponent/PewPewEcs.cs | 4 ++-- 6 files changed, 6 insertions(+), 18 deletions(-) diff --git a/source/Ecs.CSharp.Benchmark/Contexts/PewPewEcsBaseContext.cs b/source/Ecs.CSharp.Benchmark/Contexts/PewPewEcsBaseContext.cs index 6a33c09..cd39371 100644 --- a/source/Ecs.CSharp.Benchmark/Contexts/PewPewEcsBaseContext.cs +++ b/source/Ecs.CSharp.Benchmark/Contexts/PewPewEcsBaseContext.cs @@ -23,7 +23,7 @@ public struct PPComponent3 : IComponent namespace Ecs.CSharp.Benchmark.Contexts { - public class PewPewEcsBaseContext : IDisposable + public class PewPewEcsBaseContext { public HybridWorld HybridWorld { get; } @@ -41,9 +41,5 @@ public PewPewEcsBaseContext(int entityCount, int entityPadding) { HybridWorld = WorldFactory.Shared.CreateHybridWorld(c => c.MaxEntitiesCount = entityCount * entityPadding + entityCount); } - - public virtual void Dispose() - { - } } } diff --git a/source/Ecs.CSharp.Benchmark/CreateEntityWithOneComponent/PewPewEcs.cs b/source/Ecs.CSharp.Benchmark/CreateEntityWithOneComponent/PewPewEcs.cs index 5b4afa4..b852bd8 100644 --- a/source/Ecs.CSharp.Benchmark/CreateEntityWithOneComponent/PewPewEcs.cs +++ b/source/Ecs.CSharp.Benchmark/CreateEntityWithOneComponent/PewPewEcs.cs @@ -7,9 +7,6 @@ namespace Ecs.CSharp.Benchmark { public partial class CreateEntityWithOneComponent { - [Context] - private readonly PewPewEcsBaseContext _pewEcsBaseContext; - [BenchmarkCategory(Categories.PewPewEcs)] [Benchmark] public void PewPewEcs() diff --git a/source/Ecs.CSharp.Benchmark/CreateEntityWithThreeComponents/PewPewEcs.cs b/source/Ecs.CSharp.Benchmark/CreateEntityWithThreeComponents/PewPewEcs.cs index 863f99f..d5a9f6b 100644 --- a/source/Ecs.CSharp.Benchmark/CreateEntityWithThreeComponents/PewPewEcs.cs +++ b/source/Ecs.CSharp.Benchmark/CreateEntityWithThreeComponents/PewPewEcs.cs @@ -7,9 +7,6 @@ namespace Ecs.CSharp.Benchmark { public partial class CreateEntityWithThreeComponents { - [Context] - private readonly PewPewEcsBaseContext _pewEcsBaseContext; - [BenchmarkCategory(Categories.PewPewEcs)] [Benchmark] public void PewPewEcs() diff --git a/source/Ecs.CSharp.Benchmark/CreateEntityWithTwoComponents/PewPewEcs.cs b/source/Ecs.CSharp.Benchmark/CreateEntityWithTwoComponents/PewPewEcs.cs index 9c93578..891cec6 100644 --- a/source/Ecs.CSharp.Benchmark/CreateEntityWithTwoComponents/PewPewEcs.cs +++ b/source/Ecs.CSharp.Benchmark/CreateEntityWithTwoComponents/PewPewEcs.cs @@ -7,9 +7,6 @@ namespace Ecs.CSharp.Benchmark { public partial class CreateEntityWithTwoComponents { - [Context] - private readonly PewPewEcsBaseContext _pewEcsBaseContext; - [BenchmarkCategory(Categories.PewPewEcs)] [Benchmark] public void PewPewEcs() diff --git a/source/Ecs.CSharp.Benchmark/Ecs.CSharp.Benchmark.csproj b/source/Ecs.CSharp.Benchmark/Ecs.CSharp.Benchmark.csproj index ea4bf04..66cbd61 100644 --- a/source/Ecs.CSharp.Benchmark/Ecs.CSharp.Benchmark.csproj +++ b/source/Ecs.CSharp.Benchmark/Ecs.CSharp.Benchmark.csproj @@ -11,7 +11,8 @@ latest true true - $(NoWarn);NETSDK1206 + $(NoWarn);NETSDK1206;CA1515;CA1815;CA1051 + true CHECK_CACHE_MISSES @@ -21,7 +22,7 @@ - + diff --git a/source/Ecs.CSharp.Benchmark/SystemWithOneComponent/PewPewEcs.cs b/source/Ecs.CSharp.Benchmark/SystemWithOneComponent/PewPewEcs.cs index 16edc8f..6b51c6b 100644 --- a/source/Ecs.CSharp.Benchmark/SystemWithOneComponent/PewPewEcs.cs +++ b/source/Ecs.CSharp.Benchmark/SystemWithOneComponent/PewPewEcs.cs @@ -47,7 +47,7 @@ public PewPewEcsContext(int entityCount, int entityPadding) : base(entityCount, } } - public struct OneComponentsQuery : IQueryWithoutId + internal struct OneComponentsQuery : IQueryWithoutId { public void Update(ref PPComponent1 component1) { @@ -55,7 +55,7 @@ public void Update(ref PPComponent1 component1) } } - public struct OneComponentsBatchQuery : IBatchQuery + internal struct OneComponentsBatchQuery : IBatchQuery { public void BatchUpdate(Span component1) {