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: Mon, 12 Oct 2026 13:31:52 UTC
Version: Ark v0.8.3
Go version: 1.26.2
CPU: AMD EPYC 9V45 96-Core Processor

Query

Operation Time Remark
Query.Next 0.4 ns
Query.Next + Query.Get 1 0.5 ns
Query.Next + Query.Get 2 0.7 ns
Query.Next + Query.Get 5 1.2 ns
Query.Next + Query.Entity 0.6 ns
Query.Next + Query.Relation 0.9 ns
Pos/Vel Next/Get 1.0 ns iter entities
Pos/Vel NextTable/GetColumns 0.5 ns iter tables, w/ nested loop
Filter1.Query + Query1.Close 32.9 ns
Filter1.Query + Query1.Close 35.0 ns registered filter

World access

Operation Time Remark
World.Alive 0.4 ns random, 1000 entities
Map.Get 1.2 ns random, 1000 entities
Map.GetUnchecked 0.9 ns random, 1000 entities
Map.Has 1.0 ns random, 1000 entities
Map.HasUnchecked 0.9 ns random, 1000 entities
Map5.Get 5 4.1 ns random, 1000 entities
Map5.HasAll 5 2.8 ns random, 1000 entities
Map.GetRelation 1.4 ns random, 1000 entities
Map.GetRelationUnchecked 1.1 ns random, 1000 entities

Entities

Operation Time Remark
Entity.IsZero 0.1 ns
World.NewEntity 8.6 ns memory already alloc.
Map1.NewEntityFn w/ 1 Comp 13.6 ns memory already alloc.
Map5.NewEntityFn w/ 5 Comps 14.1 ns memory already alloc.
Map1.NewEntity w/ 1 Comp 16.4 ns memory already alloc.
Map5.NewEntity w/ 5 Comps 20.7 ns memory already alloc.
World.RemoveEntity 16.3 ns
World.RemoveEntity w/ 1 Comp 19.2 ns
World.RemoveEntity w/ 5 Comps 30.7 ns

Entities, batched

Operation Time Remark
World.NewEntities 5.7 ns 1000, memory already alloc.
Map1.NewBatchFn w/ 1 Comp 5.6 ns 1000, memory already alloc.
Map5.NewBatchFn w/ 5 Comps 5.7 ns 1000, memory already alloc.
World.RemoveEntities 2.1 ns 1000
World.RemoveEntities w/ 1 Comp 2.3 ns 1000
World.RemoveEntities w/ 5 Comps 2.8 ns 1000

Components

Operation Time Remark
Map1.AddFn 1 Comp 23.3 ns memory already alloc.
Map5.AddFn 5 Comps 34.2 ns memory already alloc.
Map1.AddFn 1 to 5 Comps 53.7 ns memory already alloc.
Map1.Add 1 Comp 27.2 ns memory already alloc.
Map5.Add 5 Comps 40.4 ns memory already alloc.
Map1.Add 1 to 5 Comps 54.9 ns memory already alloc.
Map1.Remove 1 Comp 23.5 ns memory already alloc.
Map5.Remove 5 Comps 45.9 ns memory already alloc.
Map1.Remove 1 of 5 Comps 48.7 ns memory already alloc.
Exchange1.ExchangeFn 1 Comp 32.6 ns memory already alloc.
Exchange1.ExchangeFn 1 of 5 Comps 57.0 ns memory already alloc.
Exchange1.Exchange 1 Comp 34.5 ns memory already alloc.
Exchange1.Exchange 1 of 5 Comps 58.8 ns memory already alloc.

Components, batched

Operation Time Remark
Map1.AddBatchFn 1 Comp 2.2 ns 1000, memory already alloc.
Map5.AddBatchFn 5 Comps 1.9 ns 1000, memory already alloc.
Map1.AddBatchFn 1 to 5 Comps 3.6 ns 1000, memory already alloc.
Map1.RemoveBatch 1 Comp 2.0 ns 1000, memory already alloc.
Map5.RemoveBatch 5 Comps 2.7 ns 1000, memory already alloc.
Map1.RemoveBatch 1 of 5 Comps 3.6 ns 1000, memory already alloc.
Exchange1.ExchangeBatchFn 1 Comp 2.0 ns 1000, memory already alloc.
Exchange1.ExchangeBatchFn 1 of 5 Comps 3.2 ns 1000, memory already alloc.

Other

Operation Time Remark
ecs.NewWorld 9.8 μs
World.Reset 50.9 ns empty world
ecs.ComponentID 10.3 ns component already registered