diff options
author | David Karlaš <david.karlas@xamarin.com> | 2016-02-03 17:10:02 +0300 |
---|---|---|
committer | David Karlaš <david.karlas@xamarin.com> | 2016-02-04 10:59:52 +0300 |
commit | 08f8da62927ebe94dab921e86dcd380f0b2938b6 (patch) | |
tree | 39099400d4344ee2733649cd194e020e79abcc04 /main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs | |
parent | ff14d961ecc6e9e23f48afbb7e005a42a6671823 (diff) |
[Ide] Optimise FileSearchCategory cache creation
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs index 5db3ed8216..b5204a2e27 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs @@ -99,11 +99,18 @@ namespace MonoDevelop.Components.MainToolbar } static List<Tuple<string, string, ProjectFile>> allFilesCache; + static object allFilesLock = new object (); public override Task GetResults (ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { return Task.Run (delegate { - var files = allFilesCache = allFilesCache ?? GenerateAllFiles (); + List<Tuple<string, string, ProjectFile>> files; + //This lock is here in case user quickly types 5 letters which triggers 5 threads + //we don't want to use all CPU doing same thing, instead 1st one will create cache, others will wait here + //and then all will use cached version... + lock (allFilesLock) { + files = allFilesCache = allFilesCache ?? GenerateAllFiles (); + } var matcher = StringMatcher.GetMatcher (pattern.Pattern, false); var savedMatches = new Dictionary<string, MatchResult> (); foreach (var file in files) { |