Ark
Benchmarks

Benchmarks

This chapter gives an overview of the runtime cost of typical Ark operations. All time information is per entity. All components used in the benchmarks have two int64 fields. Batch operations are performed in batches of 1000 entities.

Benchmark code: benchmark/table in the GitHub repository.

Benchmarks are run automatically in the GitHub CI, and are updated on this page on every merge into the main branch. They always reflect the latest development state of Ark.

For comparative benchmarks of different Go ECS implementations, see the go-ecs-benchmarks repository.


Last run: Sun, 02 Nov 2025 20:12:03 UTC
Version: Ark v0.6.4
Go version: 1.25.1
CPU: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz

Query

Operation Time Remark
Query.Next 2.2 ns
Query.Next + Query.Get 1 2.3 ns
Query.Next + Query.Get 2 2.1 ns
Query.Next + Query.Get 5 2.4 ns
Query.Next + Query.Entity 2.0 ns
Query.Next + Query.Relation 2.1 ns
Filter1.Query + Query1.Close 51.1 ns
Filter1.Query + Query1.Close 52.1 ns registered filter

World access

Operation Time Remark
World.Alive 0.8 ns random, 1000 entities
Map.Get 2.4 ns random, 1000 entities
Map.GetUnchecked 1.8 ns random, 1000 entities
Map.Has 2.1 ns random, 1000 entities
Map.HasUnchecked 1.5 ns random, 1000 entities
Map5.Get 5 7.5 ns random, 1000 entities
Map5.HasAll 5 6.1 ns random, 1000 entities
Map.GetRelation 2.4 ns random, 1000 entities
Map.GetRelationUnchecked 1.9 ns random, 1000 entities

Entities

Operation Time Remark
Entity.IsZero 0.3 ns
World.NewEntity 14.7 ns memory already alloc.
Map1.NewEntityFn w/ 1 Comp 29.2 ns memory already alloc.
Map5.NewEntityFn w/ 5 Comps 45.1 ns memory already alloc.
Map1.NewEntity w/ 1 Comp 36.1 ns memory already alloc.
Map5.NewEntity w/ 5 Comps 60.0 ns memory already alloc.
World.RemoveEntity 26.0 ns
World.RemoveEntity w/ 1 Comp 33.3 ns
World.RemoveEntity w/ 5 Comps 57.0 ns

Entities, batched

Operation Time Remark
World.NewEntities 10.5 ns 1000, memory already alloc.
Map1.NewBatchFn w/ 1 Comp 10.6 ns 1000, memory already alloc.
Map5.NewBatchFn w/ 5 Comps 10.6 ns 1000, memory already alloc.
World.RemoveEntities 4.3 ns 1000
World.RemoveEntities w/ 1 Comp 4.4 ns 1000
World.RemoveEntities w/ 5 Comps 5.5 ns 1000

Components

Operation Time Remark
Map1.AddFn 1 Comp 37.2 ns memory already alloc.
Map5.AddFn 5 Comps 49.0 ns memory already alloc.
Map1.AddFn 1 to 5 Comps 99.6 ns memory already alloc.
Map1.Add 1 Comp 43.4 ns memory already alloc.
Map5.Add 5 Comps 64.5 ns memory already alloc.
Map1.Add 1 to 5 Comps 105.7 ns memory already alloc.
Map1.Remove 1 Comp 42.2 ns memory already alloc.
Map5.Remove 5 Comps 83.7 ns memory already alloc.
Map1.Remove 1 of 5 Comps 90.5 ns memory already alloc.
Exchange1.ExchangeFn 1 Comp 52.6 ns memory already alloc.
Exchange1.ExchangeFn 1 of 5 Comps 108.3 ns memory already alloc.
Exchange1.Exchange 1 Comp 61.5 ns memory already alloc.
Exchange1.Exchange 1 of 5 Comps 112.5 ns memory already alloc.

Components, batched

Operation Time Remark
Map1.AddBatchFn 1 Comp 3.2 ns 1000, memory already alloc.
Map5.AddBatchFn 5 Comps 3.2 ns 1000, memory already alloc.
Map1.AddBatchFn 1 to 5 Comps 6.5 ns 1000, memory already alloc.
Map1.RemoveBatch 1 Comp 3.5 ns 1000, memory already alloc.
Map5.RemoveBatch 5 Comps 4.6 ns 1000, memory already alloc.
Map1.RemoveBatch 1 of 5 Comps 6.0 ns 1000, memory already alloc.
Exchange1.ExchangeBatchFn 1 Comp 3.6 ns 1000, memory already alloc.
Exchange1.ExchangeBatchFn 1 of 5 Comps 6.3 ns 1000, memory already alloc.

Other

Operation Time Remark
ecs.NewWorld 18.4 μs
World.Reset 37.9 ns empty world
ecs.ComponentID 17.7 ns component already registered