Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Karlaš <david.karlas@xamarin.com>2016-02-03 17:10:02 +0300
committerDavid Karlaš <david.karlas@xamarin.com>2016-02-04 10:59:52 +0300
commit08f8da62927ebe94dab921e86dcd380f0b2938b6 (patch)
tree39099400d4344ee2733649cd194e020e79abcc04 /main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs
parentff14d961ecc6e9e23f48afbb7e005a42a6671823 (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.cs9
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) {