c# - Why is dictionary lookup slower than recursive search? -


i trying optimize search node in treenodecollection. original method uses recursive approach:

public ugtreenode findnode(baseid nodeid, treenodecollection nodes) {     foreach (ugtreenode n in nodes)     {         if (n.node_info.description.base_id.id == nodeid.id &&             n.node_info.description.base_id.rootid == nodeid.rootid &&             n.node_info.description.base_id.subid == nodeid.subid)             return n;         ugtreenode n1 = findnode(nodeid, n.nodes);         if (n1 != null)             return n1;     }     return null; } 

i tried storing nodes in dictionary , use dictionary.trygetvalue search node:

public ugtreenode findnode(baseid nodeid, treenodecollection nodes) {     ugtreenode res;     _nodescache.trygetvalue(nodeid.id, out res);     return res; } 

but turns out second approach way slower first (appoximately 10 times slower). possible reasons this?

the recursion may faster when search 1 of first items in tree. depends on equals implementation of baseid or comparer use in dictionary. in recursive method, have reference comparison. dictionary uses gethashcode , equals.

how did measure performance?


Comments

Popular posts from this blog

java.util.scanner - How to read and add only numbers to array from a text file -

rewrite - Trouble with Wordpress multiple custom querystrings -