diff options
author | Marius Ungureanu <therzok@gmail.com> | 2018-03-29 18:12:22 +0300 |
---|---|---|
committer | Marius Ungureanu <teromario@yahoo.com> | 2018-04-17 14:13:26 +0300 |
commit | 3122a0f6504655d9ec164416a902861151a6b869 (patch) | |
tree | a9511fd3bcd1e4122a1ae8e01a2c0eba31f38545 /main/src/core | |
parent | 06dc79bb42e6c5d55dc73e9786b36ad7353f333c (diff) |
[Core] Use an immutable dictionary instead of a dictionary and a lock
This reduces lock contention happening when evaluating a with conditions
Diffstat (limited to 'main/src/core')
-rw-r--r-- | main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs index 0e1ac4c2ad..ccdf51b6ee 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs @@ -1271,7 +1271,7 @@ namespace MonoDevelop.Projects.MSBuild project.Targets.Add (newTarget); } - Dictionary<string, ConditionExpression> conditionCache = new Dictionary<string, ConditionExpression> (); + System.Collections.Immutable.ImmutableDictionary<string, ConditionExpression> conditionCache = System.Collections.Immutable.ImmutableDictionary<string, ConditionExpression>.Empty; bool SafeParseAndEvaluate (ProjectInfo project, MSBuildEvaluationContext context, string condition, bool collectConditionedProperties = false, string customEvalBasePath = null) { try { @@ -1281,11 +1281,10 @@ namespace MonoDevelop.Projects.MSBuild context.CustomFullDirectoryName = customEvalBasePath; try { - ConditionExpression ce; - lock (conditionCache) {
- if (!conditionCache.TryGetValue (condition, out ce))
- ce = ConditionParser.ParseCondition (condition);
- conditionCache [condition] = ce; + ConditionExpression ce;
+ if (!conditionCache.TryGetValue (condition, out ce)) {
+ ce = ConditionParser.ParseCondition (condition); + conditionCache = conditionCache.SetItem (condition, ce); } if (collectConditionedProperties) |