Used ReflectionOnly and/or public types where possible to avoid loading related assemblies unnecessarily

Fixes #4763

Co-Authored-By: taloth <taloth@users.noreply.github.com>
This commit is contained in:
Qstick 2020-08-15 00:13:42 -04:00
parent 71ad2ec794
commit 39a1dbf1d1
4 changed files with 8 additions and 7 deletions

View File

@ -30,14 +30,14 @@ namespace NzbDrone.Common.Composition
#if !NETCOREAPP #if !NETCOREAPP
foreach (var assembly in assemblies) foreach (var assembly in assemblies)
{ {
_loadedTypes.AddRange(Assembly.Load(assembly).GetTypes()); _loadedTypes.AddRange(Assembly.Load(assembly).GetExportedTypes());
} }
#else #else
var startupPath = AppDomain.CurrentDomain.BaseDirectory; var startupPath = AppDomain.CurrentDomain.BaseDirectory;
foreach (var assemblyName in assemblies) foreach (var assemblyName in assemblies)
{ {
_loadedTypes.AddRange(AssemblyLoadContext.Default.LoadFromAssemblyPath(Path.Combine(startupPath, $"{assemblyName}.dll")).GetTypes()); _loadedTypes.AddRange(AssemblyLoadContext.Default.LoadFromAssemblyPath(Path.Combine(startupPath, $"{assemblyName}.dll")).GetExportedTypes());
} }
var toRegisterResolver = new List<string> { "System.Data.SQLite" }; var toRegisterResolver = new List<string> { "System.Data.SQLite" };

View File

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
@ -17,7 +17,7 @@ namespace NzbDrone.Common.Reflection
public static List<Type> ImplementationsOf<T>(this Assembly assembly) public static List<Type> ImplementationsOf<T>(this Assembly assembly)
{ {
return assembly.GetTypes().Where(c => typeof(T).IsAssignableFrom(c)).ToList(); return assembly.GetExportedTypes().Where(c => typeof(T).IsAssignableFrom(c)).ToList();
} }
public static bool IsSimpleType(this Type type) public static bool IsSimpleType(this Type type)
@ -68,7 +68,7 @@ namespace NzbDrone.Common.Reflection
public static Type FindTypeByName(this Assembly assembly, string name) public static Type FindTypeByName(this Assembly assembly, string name)
{ {
return assembly.GetTypes().SingleOrDefault(c => c.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)); return assembly.GetExportedTypes().SingleOrDefault(c => c.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase));
} }
public static bool HasAttribute<TAttribute>(this Type type) public static bool HasAttribute<TAttribute>(this Type type)

View File

@ -37,6 +37,7 @@ namespace NzbDrone.Core.Datastore
Environment.SetEnvironmentVariable("No_Expand", "true"); Environment.SetEnvironmentVariable("No_Expand", "true");
Environment.SetEnvironmentVariable("No_SQLiteXmlConfigFile", "true"); Environment.SetEnvironmentVariable("No_SQLiteXmlConfigFile", "true");
Environment.SetEnvironmentVariable("No_PreLoadSQLite", "true"); Environment.SetEnvironmentVariable("No_PreLoadSQLite", "true");
Environment.SetEnvironmentVariable("No_SQLiteFunctions", "true");
} }
public static void RegisterDatabase(IContainer container) public static void RegisterDatabase(IContainer container)

View File

@ -1,4 +1,4 @@
using System; using System;
using NLog; using NLog;
using NzbDrone.Core.Lifecycle; using NzbDrone.Core.Lifecycle;
@ -9,7 +9,7 @@ namespace Radarr.Host
void Attach(); void Attach();
} }
internal class CancelHandler : ICancelHandler public class CancelHandler : ICancelHandler
{ {
private readonly ILifecycleService _lifecycleService; private readonly ILifecycleService _lifecycleService;
private object _syncRoot; private object _syncRoot;