Because a new SymbolProc object is always constructed, the first call is always a cache miss. This includes the common case of passing symbol procs directly to enumerable methods like map or select.
Consider the possibility of making the inline cache a part of the long lived Symbol instances, or optimising the &:symbol use case.