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:
authorMarius Ungureanu <therzok@gmail.com>2018-03-29 18:12:22 +0300
committerMarius Ungureanu <teromario@yahoo.com>2018-04-17 14:13:26 +0300
commit3122a0f6504655d9ec164416a902861151a6b869 (patch)
treea9511fd3bcd1e4122a1ae8e01a2c0eba31f38545 /main/src/core
parent06dc79bb42e6c5d55dc73e9786b36ad7353f333c (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.cs11
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)