forked from micropython/micropython
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Open
Labels
Milestone
Description
CircuitPython version and board name
- CircuitPython 9.2.8 @ Qt Py M0 (similar performance on 9.2.7)
- CircuitPython 9.2.8 @ ItsyBitsy M4 (have not tried other versions)Code/REPL
import time
import supervisor
class Foo:
pass
class Bar:
a = 1
b = 2
c = 3
d = 4
e = 5
f = 6
g = 7
h = 8
i = 9
j = 10
foo = Foo()
bar = Bar()
arr = [1, 2, 3, 4, 5]
dct = {"a": 1, "b": 2, "c": 3}
def measure(label, value):
now = supervisor.ticks_ms()
dir(value)
diff = supervisor.ticks_ms() - now
print("dir({}) time = {} ms".format(label, diff))
while True:
time.sleep(1)
print("\n")
measure("123", 123)
measure("\" \"", " ")
measure("arr", arr)
measure("dct", dct)
measure("foo", foo)
measure("Foo", Foo)
measure("bar", bar)
measure("Bar", Bar)Behavior
CircuitPython 9.2.8 @ Qt Py M0:
dir(123) time = 7 ms
dir(" ") time = 10 ms
dir(arr) time = 9 ms
dir(dct) time = 9 ms
dir(foo) time = 31 ms
dir(Foo) time = 16 ms
dir(bar) time = 58 ms
dir(Bar) time = 30 ms
CircuitPython 9.2.8 @ ItsyBitsy M4:
dir(123) time = 4 ms
dir(" ") time = 9 ms
dir(arr) time = 6 ms
dir(dct) time = 7 ms
dir(foo) time = 14 ms
dir(Foo) time = 7 ms
dir(bar) time = 23 ms
dir(Bar) time = 12 ms
Description
Hello, I have a vague understanding that dir() needs to walk the class hierarchy to collect all the fields, but still I was not at all expecting it to take so long, for simple class instances like foo. I'm not sure if anything can be done to improve the speed, but figured I'd file the issue anyway in case it's a performance bug.
Additional information
No response