For the purpose of optimizing an application of mine I set out to evaluate the performance of retrieving members (eg, GetField or GetProperty, anything derived from MemberInfo) from a Type.
I created a test to see whether it is faster to cache the MemberInfo in your own hashtable, or whether the performance of the GetField and GetProperty functions are actually more optimized than a simple hashtable lookup.
The setup was a class that contained 21 fields and 21 properties, 42 members in total (excluding the constructor).
I stored a list of these member names in a string array. I then looped through some code that looked up the MemberInfo for each member, and repeated this 20,000 times.
The second test cached each MemberInfo in a hashtable, and the loop instead retrieved the data from the hashtable rather than from the type.
The result was quite surprising.
The first test, using GetField or GetProperty, took about 3.8 seconds. The second test, using the hashtable, took 0.19 seconds. That's about 20 times faster. This was .Net 1.1 - in .Net 2 it's about 8 times faster (reflection was optimized in version 2).
So if you're have some code that makes heavy use of GetField/GetProperty methods, you may want to conisder caching them in a hashtable first.