RuntimeType.GetGenericTypeDefinition() is a bit expensive.
As in a Dictionary<type,type> cache lookup is faster.
I would naively expect that the generic definition of a type is stored in a field of the constructed type and GetGenericTypeDefinition to be a simple field access.