From 240a9210674070e98f4e7c91dc828f3678d5586c Mon Sep 17 00:00:00 2001 From: therzok Date: Tue, 20 Sep 2016 01:04:14 +0300 Subject: [Ide] Optimize DirectorySearch scope to only iterate the FS tree once. --- .../core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/Scope.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'main') diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/Scope.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/Scope.cs index d50148e0fd..80e72f4eb9 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/Scope.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/Scope.cs @@ -280,9 +280,11 @@ namespace MonoDevelop.Ide.FindInFiles set; } + FileProvider[] fileNames; public override int GetTotalWork (FilterOptions filterOptions) { - return GetFileNames (null, filterOptions).Count (); + fileNames = GetFileNames (filterOptions).Select (file => new FileProvider (file)).ToArray (); + return fileNames.Length; } public DirectoryScope (string path, bool recurse) @@ -291,10 +293,8 @@ namespace MonoDevelop.Ide.FindInFiles this.recurse = recurse; } - IEnumerable GetFileNames (ProgressMonitor monitor, FilterOptions filterOptions) + IEnumerable GetFileNames (FilterOptions filterOptions) { - if (monitor != null) - monitor.Log.WriteLine (GettextCatalog.GetString ("Looking in '{0}'", path)); var directoryStack = new Stack (); directoryStack.Push (path); @@ -346,7 +346,8 @@ namespace MonoDevelop.Ide.FindInFiles public override IEnumerable GetFiles (ProgressMonitor monitor, FilterOptions filterOptions) { - return GetFileNames (monitor, filterOptions).Select (file => new FileProvider (file)); + monitor.Log.WriteLine (GettextCatalog.GetString ("Looking in '{0}'", path)); + return fileNames; } public override string GetDescription (FilterOptions filterOptions, string pattern, string replacePattern) -- cgit v1.2.3