Project

General

Profile

Feature #11066

symbol.to_s performance - caching and returning a frozen string

Added by rdsubhas (Subhas Dandapani) over 4 years ago. Updated over 3 years ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:<unknown>]

Description

Hi, this is my first report so please bear with me if its bad.

Symbol.to_s creates a new string upon every call. This seems to be a huge waste of time. In typical Rails applications, "to_json" is called hundreds of times for ActiveRecord models on each request. Many symbols are being converted to string and GCd again and again. Is it possible to cache and return a Frozen string (string.freeze) when symbol.to_s is called? Now that symbols are also garbage collected, the string can also be garbage collected.

I tried getting some performance benchmarks, but with Ruby 2.1, I'm not able to modify Symbol class. I believe Symbols are now frozen internally so any modifications are not possible. So I was not able to do any monkey patching or benchmarking. But I can confirm that new strings are getting created every time, please see attached file. I believe caching this would improve performance. It would also increase memory usage, but since symbols are also garbage collected, the memory can be freed up over time, and anyways we can cache only when "symbol.to_s" is invoked first time.


Files

symbol_to_s_mem_usage.rb (283 Bytes) symbol_to_s_mem_usage.rb rdsubhas (Subhas Dandapani), 04/13/2015 08:32 PM

Related issues

Related to Ruby master - Feature #11346: New #intern_str or similarly-named method of Symbol to return a cached, frozen string (like "string".freeze)OpenActions

History

#1

Updated by nobu (Nobuyoshi Nakada) over 4 years ago

I tried it and found some libraries (ostruct.rb at least) depend on the current behavior.

#2

Updated by nobu (Nobuyoshi Nakada) over 4 years ago

  • Related to Feature #11346: New #intern_str or similarly-named method of Symbol to return a cached, frozen string (like "string".freeze) added
#3

Updated by naruse (Yui NARUSE) over 3 years ago

  • Assignee deleted (ruby-core)

Also available in: Atom PDF