Speed up named type lookups in managed type system (#84285)
authorMichal Strehovský <MichalStrehovsky@users.noreply.github.com>
Wed, 5 Apr 2023 23:58:06 +0000 (08:58 +0900)
committerGitHub <noreply@github.com>
Wed, 5 Apr 2023 23:58:06 +0000 (08:58 +0900)
commit18e2c5fd9e2239a8b06fe49dbb6492d40f5e5e19
treea793ebc44eab9bba6eda090d06d170991384dcee
parent2c37a2df57ffd8e940a12a678e1cac383d7acf97
Speed up named type lookups in managed type system (#84285)

When the type system needs to resolve a named type in a module, it will do a `foreach` loop over all types in the module looking for the type. This can get mildly hot and I've seen it in CPU profiles but it never looked too important to address (despite the TODO).

But when MIBC files are passed to the compiler, this gets ridiculously hot. Compile Hello world by default: 0.98 seconds. Compile hello world with 5 MIBC files: 9.1 seconds.

This adds a hashtable to the lookup and drops the MIBC case to 1.4 seconds (we'll want to parallelize the MIBC loading on a background thread to get rid of the last mile, but first things first).
src/coreclr/tools/Common/TypeSystem/Ecma/EcmaModule.cs