anchor.diff:                  let ilModule, ilAssemblyRefs, _pdb = openPE (fullPath, pefile, None, reduceMemoryUsage, opts.ilGlobals, false) 
                   new ILModuleReaderImpl(ilModule, ilAssemblyRefs, ignore)
   
  +        let ilModuleReader = ilModuleReader :> ILModuleReader 
           if keyOk then 
  -            ilModuleReaderCacheLock.AcquireLock (fun ltok -> ilModuleReaderCache.Put(ltok, key, ilModuleReader))
  -
  -        ilModuleReader :> ILModuleReader
  +            ilModuleReaderCache1Lock.AcquireLock (fun ltok -> ilModuleReaderCache1.Put(ltok, key, ilModuleReader))
  +            ilModuleReaderCache2.[key] <- System.WeakReference<_>(ilModuleReader)
  +        ilModuleReader
  +        
                   
       else
           // This case is primarily used in fsc.exe. 
  
positive.code:             let fakeKey = ILModuleReaderCacheKey(fileName, System.DateTime.UtcNow, ILScopeRef.Local, false, ReduceMemoryFlag.Yes, MetadataOnlyFlag.Yes)
              fakeKey, false
  
      let cacheResult = 
          if keyOk then 
              if opts.pdbDirPath.IsSome then None // can't used a cached entry when reading PDBs, since it makes the returned object IDisposable
              else ilModuleReaderCacheLock.AcquireLock (fun ltok -> ilModuleReaderCache.TryGet(ltok, key))
          else 
              None
  
      match cacheResult with 
      | Some ilModuleReader -> ilModuleReader
      | None -> 
  
      let reduceMemoryUsage = (opts.reduceMemoryUsage = ReduceMemoryFlag.Yes)
      let metadataOnly = (opts.metadataOnly = MetadataOnlyFlag.Yes) 
  
negative.code:     let inbase = Filename.fileNameOfPath fileName + ": "
  
      // All the caches. The sizes are guesstimates for the rough sharing-density of the assembly 
      let cacheAssemblyRef = mkCacheInt32 false inbase "ILAssemblyRef" (getNumRows TableNames.AssemblyRef)
      let cacheMethodSpecAsMethodData = mkCacheGeneric reduceMemoryUsage inbase "MethodSpecAsMethodData" (getNumRows TableNames.MethodSpec / 20 + 1)
      let cacheMemberRefAsMemberData = mkCacheGeneric reduceMemoryUsage inbase "MemberRefAsMemberData" (getNumRows TableNames.MemberRef / 20 + 1)
      let cacheCustomAttr = mkCacheGeneric reduceMemoryUsage inbase "CustomAttr" (getNumRows TableNames.CustomAttribute / 50 + 1)
      let cacheTypeRef = mkCacheInt32 false inbase "ILTypeRef" (getNumRows TableNames.TypeRef / 20 + 1)
      let cacheTypeRefAsType = mkCacheGeneric reduceMemoryUsage inbase "TypeRefAsType" (getNumRows TableNames.TypeRef / 20 + 1)
      let cacheBlobHeapAsPropertySig = mkCacheGeneric reduceMemoryUsage inbase "BlobHeapAsPropertySig" (getNumRows TableNames.Property / 20 + 1)
      let cacheBlobHeapAsFieldSig = mkCacheGeneric reduceMemoryUsage inbase "BlobHeapAsFieldSig" (getNumRows TableNames.Field / 20 + 1)
  