gitee.com/quant1x/gox@v1.7.6/fastjson/arena_timing_test.go (about) 1 package fastjson 2 3 import ( 4 "sync/atomic" 5 "testing" 6 ) 7 8 func BenchmarkArenaTypicalUse(b *testing.B) { 9 // Determine the length of created object 10 var aa Arena 11 obj := benchCreateArenaObject(&aa) 12 objLen := len(obj.String()) 13 b.SetBytes(int64(objLen)) 14 b.ReportAllocs() 15 b.RunParallel(func(pb *testing.PB) { 16 var buf []byte 17 var a Arena 18 var sink int 19 for pb.Next() { 20 obj := benchCreateArenaObject(&a) 21 buf = obj.MarshalTo(buf[:0]) 22 a.Reset() 23 sink += len(buf) 24 } 25 atomic.AddUint64(&Sink, uint64(sink)) 26 }) 27 } 28 29 func benchCreateArenaObject(a *Arena) *Value { 30 o := a.NewObject() 31 o.Set("key1", a.NewNumberInt(123)) 32 o.Set("key2", a.NewNumberFloat64(-1.23)) 33 34 // Create a string only once and use multuple times as a performance optimization. 35 s := a.NewString("foobar") 36 aa := a.NewArray() 37 for i := 0; i < 10; i++ { 38 aa.SetArrayItem(i, s) 39 } 40 o.Set("key3", aa) 41 return o 42 }