Perf fix: use symbols instead of strings for const/ivar access methods
From pull request: https://github.com/ruby/ruby/pull/195
Fixes a number of places where literal, non-dynamic strings are used as the first argument for constant and instance variable get, set, and defined? methods. This reduces object overhead in all cases.
- Setting @original_filename and @content_type in read_multipart (cgi/core.rb). This is called for every multipart read.
- Setting uri (Uri Gorelik) and @ref in DrbObject.new_with (drb/drb.rb). Called for every "with" instantiation of a DrbObject.
- Setting BINDING_QUEUE in IRB::Workspace#initialize (irb/workspace.rb). Called for every new IRB workspace.
- Getting @mon_mutex in ConditionVariable#wait (monitor.rb). Called for every #wait. This fix makes the method require zero object allocation (other than imposed by the runtime).
The other fixes are rarely called, but fixed for consistency.
make test-all passes the same with or without this patch.
Updated by mame (Yusuke Endoh) over 7 years ago
- Status changed from Open to Assigned
- Assignee set to shyouhei (Shyouhei Urabe)
The patch looks benign. I wonder how much is the performance improved, though.
Urabe-san, could you handle the pull request?
Yusuke Endoh email@example.com
Updated by headius (Charles Nutter) over 7 years ago
The performance gain is not tremendous, but it does avoid a lot of intermediate string objects that could cumulatively impact performance through GC overhead.
In any case, it's a good cleanup patch, and there are certainly small perf gains.
Updated by marcandre (Marc-Andre Lafortune) over 7 years ago
- Category set to lib
- Status changed from Assigned to Closed
Committed as r37688.
I'm sorry, I should have added 'patch by Charles Nutter' to the commit log but I forgot that although git can track authors, svn does not.