diff options
author | Jean Boussier <jean.boussier@gmail.com> | 2020-08-18 09:41:38 +0200 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2020-09-09 11:11:36 -0700 |
commit | 5001cc47169614ea07d87651c95c2ee185e374e0 (patch) | |
tree | 09f4891cd1a83559b4e4a4793a31c8dfbef64fc9 /benchmark | |
parent | 76c7146ab4bb86dc9474efee279a19d31c4374b2 (diff) | |
download | ruby-5001cc47169614ea07d87651c95c2ee185e374e0.tar.gz |
Optimize ObjectSpace.dump_all
The two main optimization are:
- buffer writes for improved performance
- avoid formatting functions when possible
```
| |compare-ruby|built-ruby|
|:------------------|-----------:|---------:|
|dump_all_string | 1.038| 195.925|
| | -| 188.77x|
|dump_all_file | 33.453| 139.645|
| | -| 4.17x|
|dump_all_dev_null | 44.030| 278.552|
| | -| 6.33x|
```
Diffstat (limited to 'benchmark')
-rw-r--r-- | benchmark/objspace_dump_all.yml | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/benchmark/objspace_dump_all.yml b/benchmark/objspace_dump_all.yml new file mode 100644 index 0000000000..ebab562d2e --- /dev/null +++ b/benchmark/objspace_dump_all.yml @@ -0,0 +1,13 @@ +prelude: | + require 'objspace' + require 'tempfile' + $objs = 1_000.times.map { Object.new } + $strings = 1_000.times.map { |i| "string #{i}" } + $file = Tempfile.new('heap') + $dev_null = File.open(File::NULL, 'w+') + +benchmark: + dump_all_string: "ObjectSpace.dump_all(output: :string)" + dump_all_file: "ObjectSpace.dump_all(output: $file)" + dump_all_dev_null: "ObjectSpace.dump_all(output: $dev_null)" +loop_count: 1 |