Skip to content

Commit a5a1c9a

Browse files
author
Greg Galloway
committed
improving AssemblyResolve performance by caching failures
1 parent dd10497 commit a5a1c9a

1 file changed

Lines changed: 9 additions & 2 deletions

File tree

BidsHelperPackage.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,7 @@ System.Reflection.Assembly currentDomain_AssemblyResolve(object sender, ResolveE
515515
}
516516
#else
517517
string _recursiveAssemblyResolveNameToSkip = null;
518+
System.Collections.Generic.List<string> _assemblyLoadsFailed = new System.Collections.Generic.List<string>();
518519

519520
/// <summary>
520521
/// Only fires if an assembly fails to load. This gives us a chance to redirect to a DLL that does exist.
@@ -543,14 +544,20 @@ System.Reflection.Assembly currentDomain_AssemblyResolve(object sender, ResolveE
543544
for (int i = 0; i < 500; i++)
544545
{
545546
assemblyname.Version = new Version(originalVersion.Major, i, 0, 0);
547+
string sAssemblyName = assemblyname.ToString();
548+
if (_assemblyLoadsFailed.Contains(sAssemblyName)) continue;
546549
try
547550
{
548-
_recursiveAssemblyResolveNameToSkip = assemblyname.ToString();
551+
_recursiveAssemblyResolveNameToSkip = sAssemblyName;
549552
var assembly = Assembly.Load(assemblyname);
550553
System.Diagnostics.Debug.WriteLine("AssemblyResolveSuccess: " + args.Name + " to " + assemblyname.Version + " in " + DateTime.Now.Subtract(dtStart).TotalMilliseconds + "ms");
551554
return assembly;
552555
}
553-
catch { }
556+
catch
557+
{
558+
if (!_assemblyLoadsFailed.Contains(sAssemblyName))
559+
_assemblyLoadsFailed.Add(sAssemblyName);
560+
}
554561
finally
555562
{
556563
_recursiveAssemblyResolveNameToSkip = null;

0 commit comments

Comments
 (0)