aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Kernel.cs
diff options
context:
space:
mode:
authorLukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com>2012-08-24 12:24:29 -0400
committerLukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com>2012-08-24 12:24:29 -0400
commitcc25bd579b820a91e436a358f38321d254c27451 (patch)
tree0370b3de129933e9dda0bf5318d1d79c23ff4f2a /MediaBrowser.Controller/Kernel.cs
parent0a16aeb4483ca8241c781eb40a07942b46bc171c (diff)
Chaged BaseItem.People to a dictionary to prevent duplicates and improve Contains performance. Tweaked ffprobe and provider execution.
Diffstat (limited to 'MediaBrowser.Controller/Kernel.cs')
-rw-r--r--MediaBrowser.Controller/Kernel.cs24
1 files changed, 16 insertions, 8 deletions
diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs
index 44833fe8e..c4f36e732 100644
--- a/MediaBrowser.Controller/Kernel.cs
+++ b/MediaBrowser.Controller/Kernel.cs
@@ -41,7 +41,13 @@ namespace MediaBrowser.Controller
/// Gets the list of currently registered metadata prvoiders
/// </summary>
[ImportMany(typeof(BaseMetadataProvider))]
- public IEnumerable<BaseMetadataProvider> MetadataProviders { get; private set; }
+ private IEnumerable<BaseMetadataProvider> MetadataProvidersEnumerable { get; set; }
+
+ /// <summary>
+ /// Once MEF has loaded the resolvers, sort them by priority and store them in this array
+ /// Given the sheer number of times they'll be iterated over it'll be faster to loop through an array
+ /// </summary>
+ private BaseMetadataProvider[] MetadataProviders { get; set; }
/// <summary>
/// Gets the list of currently registered entity resolvers
@@ -92,9 +98,9 @@ namespace MediaBrowser.Controller
// Sort the resolvers by priority
EntityResolvers = EntityResolversEnumerable.OrderBy(e => e.Priority).ToArray();
-
+
// Sort the providers by priority
- MetadataProviders = MetadataProviders.OrderBy(e => e.Priority);
+ MetadataProviders = MetadataProvidersEnumerable.OrderBy(e => e.Priority).ToArray();
// Initialize the metadata providers
Parallel.ForEach(MetadataProviders, provider =>
@@ -232,13 +238,15 @@ namespace MediaBrowser.Controller
/// </summary>
internal async Task ExecuteMetadataProviders(BaseEntity item, ItemResolveEventArgs args, bool allowInternetProviders = true)
{
- // Get all supported providers
- BaseMetadataProvider[] supportedProviders = Kernel.Instance.MetadataProviders.Where(i => i.Supports(item)).ToArray();
-
// Run them sequentially in order of priority
- for (int i = 0; i < supportedProviders.Length; i++)
+ for (int i = 0; i < MetadataProviders.Length; i++)
{
- var provider = supportedProviders[i];
+ var provider = MetadataProviders[i];
+
+ if (!provider.Supports(item))
+ {
+ continue;
+ }
if (provider.RequiresInternet && (!Configuration.EnableInternetProviders || !allowInternetProviders))
{