From 54d1d5e3797faecfe9c7648bb80e1922536ce7c6 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sun, 5 Jun 2011 00:25:50 -0700 Subject: [PATCH] GetEpisodeFilesCount should be around 5 times faster. --- NzbDrone.Core.Test/EpisodeProviderTest.cs | 2 +- NzbDrone.Core.Test/dbBenchmark.cs | 64 +++++++++++++++---- NzbDrone.Core/Providers/EpisodeProvider.cs | Bin 10742 -> 10754 bytes NzbDrone.Core/Providers/MediaFileProvider.cs | 4 +- NzbDrone.Web/Web.config | 1 + 5 files changed, 57 insertions(+), 14 deletions(-) diff --git a/NzbDrone.Core.Test/EpisodeProviderTest.cs b/NzbDrone.Core.Test/EpisodeProviderTest.cs index a1a09a6b5..abd537fca 100644 --- a/NzbDrone.Core.Test/EpisodeProviderTest.cs +++ b/NzbDrone.Core.Test/EpisodeProviderTest.cs @@ -53,7 +53,7 @@ namespace NzbDrone.Core.Test mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - var actualCount = mocker.Resolve().GetEpisodeBySeries(seriesId).Count; + var actualCount = mocker.Resolve().GetEpisodeBySeries(seriesId).ToList().Count; mocker.GetMock().VerifyAll(); actualCount.Should().Be(episodeCount); mocker.VerifyAllMocks(); diff --git a/NzbDrone.Core.Test/dbBenchmark.cs b/NzbDrone.Core.Test/dbBenchmark.cs index 0691068b8..b65f87564 100644 --- a/NzbDrone.Core.Test/dbBenchmark.cs +++ b/NzbDrone.Core.Test/dbBenchmark.cs @@ -29,6 +29,7 @@ namespace NzbDrone.Core.Test base.Setup(); + int currentFileId = 0; foreach (var _seriesId in seriesIds) { @@ -44,27 +45,38 @@ namespace NzbDrone.Core.Test { for (int i = 1; i <= Episodes_Per_Season; i++) { + var epFileId = 0; + + if (i < 10) + { + var epFile = Builder.CreateNew() + .With(e => e.SeriesId = seriesId) + .With(e => e.SeriesId = seriesId) + .And(e => e.SeasonNumber = _seasonNumber) + .And(e => e.Path = Guid.NewGuid().ToString()) + .Build(); + + files.Add(epFile); + + currentFileId++; + epFileId = currentFileId; + + } + + var episode = Builder.CreateNew() .With(e => e.SeriesId = seriesId) .And(e => e.SeasonNumber = _seasonNumber) .And(e => e.EpisodeNumber = i) .And(e => e.Ignored = false) .And(e => e.TvDbEpisodeId = episodes.Count + 1) + .And(e => e.EpisodeFileId = epFileId) .And(e => e.AirDate = DateTime.Today.AddDays(-20)) .Build(); episodes.Add(episode); - if (i < 10) - { - var epFile = Builder.CreateNew() - .With(e => e.SeriesId = seriesId) - .And(e => e.SeasonNumber = _seasonNumber) - .And(e => e.Path = Guid.NewGuid().ToString()) - .Build(); - files.Add(epFile); - } } } @@ -72,8 +84,7 @@ namespace NzbDrone.Core.Test repo.AddMany(episodes); repo.AddMany(files); - - } + } [Test] @@ -177,5 +188,36 @@ namespace NzbDrone.Core.Test Console.WriteLine("Took " + sw.Elapsed); } + + + [Test] + public void get_episode_file_count_x10() + { + var mocker = new AutoMoq.AutoMoqer(); + mocker.SetConstant(repo); + mocker.SetConstant(mocker.Resolve()); + var provider = mocker.Resolve(); + + + Thread.Sleep(1000); + + + var random = new Random(); + Console.WriteLine("Starting Test"); + + var sw = Stopwatch.StartNew(); + for (int i = 0; i < 100; i++) + { + var result = provider.GetEpisodeFilesCount(random.Next(1, 10)); + result.Item1.Should().NotBe(0); + result.Item2.Should().NotBe(0); + } + + + sw.Stop(); + + Console.WriteLine("Took " + sw.Elapsed); + } + } } diff --git a/NzbDrone.Core/Providers/EpisodeProvider.cs b/NzbDrone.Core/Providers/EpisodeProvider.cs index 05ce49b69b94be8357d0a2fd701dc511840b1c2d..31024cc5300d6517b6e12e45bed8d557dc2e50bc 100644 GIT binary patch delta 30 lcmews+!V5bosBcFG_|NQF)1f?GB;cJWCaeH&E;(M$^fiw3N!!! delta 24 gcmZn)`4+r^oo(^~Hi^k9Y|fMQ*flp#XUkRw0C1ED9RL6T diff --git a/NzbDrone.Core/Providers/MediaFileProvider.cs b/NzbDrone.Core/Providers/MediaFileProvider.cs index 9b6237df4..720ae62e3 100644 --- a/NzbDrone.Core/Providers/MediaFileProvider.cs +++ b/NzbDrone.Core/Providers/MediaFileProvider.cs @@ -191,10 +191,10 @@ namespace NzbDrone.Core.Providers { var allEpisodes = _episodeProvider.GetEpisodeBySeries(seriesId); - var episodeTotal = allEpisodes.Where(e => !e.Ignored && e.AirDate <= DateTime.Today && e.AirDate.Year > 1900).ToList(); + var episodeTotal = allEpisodes.Where(e => !e.Ignored && e.AirDate <= DateTime.Today && e.AirDate.Year > 1900); var avilableEpisodes = episodeTotal.Where(e => e.EpisodeFileId > 0); - return new Tuple(avilableEpisodes.Count(), episodeTotal.Count); + return new Tuple(avilableEpisodes.Count(), episodeTotal.Count()); } private List GetMediaFileList(string path) diff --git a/NzbDrone.Web/Web.config b/NzbDrone.Web/Web.config index 26ea04840..72fc19d8b 100644 --- a/NzbDrone.Web/Web.config +++ b/NzbDrone.Web/Web.config @@ -11,6 +11,7 @@ +