aboutsummaryrefslogtreecommitdiffstats
path: root/thread_win32.h
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2022-04-12 09:18:41 -0400
committerPeter Zhu <peter@peterzhu.ca>2022-04-12 09:54:57 -0400
commit381475f02e6b44ae729f9403637b30c445b622e5 (patch)
tree6eb7d05997f61e51cd974816afac46d5258e7fa3 /thread_win32.h
parentd0a822eec524522d81ffc7da2bb1baf906b0318a (diff)
downloadruby-381475f02e6b44ae729f9403637b30c445b622e5.tar.gz
Use an empty string when building File.expand_path
Allocating a string of length MAXPATHLEN and then shrinking the string is inefficient when the resulting path is short. Preallocating a large string is also a problem for Variable Width Allocation since we can't easily downsize the capacity. I ran the following benchmark: ```ruby Benchmark.ips do |x| { "empty" => "", "short" => "a/" * 10, "medium" => "a/" * 100, "long" => "a/" * 500 }.each do |name, path| x.report(name) do |times| i = 0 while i < times File.expand_path(path) i += 1 end end end end ``` On this commit: ``` empty 97.486k (± 0.7%) i/s - 492.915k in 5.056507s short 96.026k (± 2.4%) i/s - 486.489k in 5.068966s medium 86.304k (± 1.3%) i/s - 435.336k in 5.045112s long 59.395k (± 1.7%) i/s - 302.175k in 5.089026s ``` On master: ``` empty 94.138k (± 1.4%) i/s - 472.158k in 5.016590s short 92.043k (± 1.4%) i/s - 468.180k in 5.087496s medium 84.910k (± 2.3%) i/s - 425.750k in 5.017007s long 61.503k (± 2.7%) i/s - 309.723k in 5.039429s ```
Diffstat (limited to 'thread_win32.h')
0 files changed, 0 insertions, 0 deletions