Hi Henrik,On Thu, Oct 1, 2015 at 2:18 AM, Henrik Nergaard <henrin10@student.uia.no> wrote:Hi,
Is there a simple way to query a variable to check how many methods that
access it? (just want to know the size)
This works, but it is quite slow.
(Morph whichSelectorsAccess: #owner) size
Morph withAllSubclasses inject: 0 into: [ :sum :class | sum + (class
whichSelectorsAccess: #owner) size ]If it is slow then there's some mistake.�� Here are some measurements from the relevant code in my Spur Squeak v 5.0 image:| visited t |visited := 0.t := [self systemNavigation allMethodsSelect: [:m| visited := visited + 1. ��(m readsField: 66) or: (m writesField: 66)] localToPackage: #VMMaker] timeToRun.{t. visited. t * 1000.0 / visited } #(89 13553 6.566811775990556)| visited t |visited := 0.t := [self systemNavigation allMethodsSelect: [:m| visited := visited + 1. ��(m readsField: 6) or: (m writesField: 6)] localToPackage: #VMMaker] timeToRun.{t. visited. t * 1000.0 / visited } #(85 13553 6.271674168080867)��So 85 milliseconds to analyse 13k methods, for a cost of 6 1/4 secs per method.�� I wouldn't call that slow.The measurements for Morph and subclasses are even better:| visited t |visited := 0.t := [self systemNavigation allMethodsSelect: [:m| visited := visited + 1. ��(m readsField: 66) or: (m writesField: 66)] localTo: Morph] timeToRun.{t. visited. t * 1000.0 / visited } #(34 12434 2.7344378317516487)| visited t |visited := 0.t := [self systemNavigation allMethodsSelect: [:m| visited := visited + 1. ��(m readsField: 6) or: (m writesField: 6)] localTo: Morph] timeToRun.{t. visited. t * 1000.0 / visited } #(34 12434 2.7344378317516487)34 milliseconds, 2 3/4 usecs per method.
This on a late 2012 Mac Mini 2.3GHz Core i7.
<http://forum.world.st/file/n4852956/aMenuMorph%28885522432%29.png>
Best regards,
Henrik
--
View this message in context: http://forum.world.st/Querying-the-accessors-of-a-variable-tp4852956.html
Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.
--_,,,^..^,,,_best,��Eliot