diff --git a/src/Umbraco.Core/Models/DataTypeDefinition.cs b/src/Umbraco.Core/Models/DataTypeDefinition.cs index 4f2eb56b04..a56bbabf72 100644 --- a/src/Umbraco.Core/Models/DataTypeDefinition.cs +++ b/src/Umbraco.Core/Models/DataTypeDefinition.cs @@ -42,7 +42,6 @@ namespace Umbraco.Core.Models { _parentId = parentId; _propertyEditorAlias = propertyEditorAlias; - _additionalData = new Dictionary(); } private static readonly PropertyInfo NameSelector = ExpressionHelper.GetPropertyInfo(x => x.Name); diff --git a/src/umbraco.cms/businesslogic/Dictionary.cs b/src/umbraco.cms/businesslogic/Dictionary.cs index 7a655f8373..e524f90429 100644 --- a/src/umbraco.cms/businesslogic/Dictionary.cs +++ b/src/umbraco.cms/businesslogic/Dictionary.cs @@ -2,8 +2,10 @@ using System; using System.Collections; using System.Collections.Concurrent; using System.Data; +using System.Threading; using System.Xml; using System.Linq; +using Umbraco.Core; using umbraco.cms.businesslogic.language; using umbraco.DataLayer; using umbraco.BusinessLogic; @@ -19,7 +21,7 @@ namespace umbraco.cms.businesslogic public class Dictionary { private static volatile bool _cacheIsEnsured = false; - private static readonly object Locker = new object(); + private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim(); private static readonly ConcurrentDictionary DictionaryItems = new ConcurrentDictionary(); private static readonly Guid TopLevelParent = new Guid("41c7638d-f529-4bff-853e-59a0c2fb1bde"); @@ -33,30 +35,28 @@ namespace umbraco.cms.businesslogic /// private static void EnsureCache() { - if (!_cacheIsEnsured) + using (var lck = new UpgradeableReadLock(Locker)) { - lock (Locker) + if (_cacheIsEnsured) return; + + lck.UpgradeToWriteLock(); + + using (var dr = SqlHelper.ExecuteReader("Select pk, id, [key], parent from cmsDictionary")) { - if (!_cacheIsEnsured) + while (dr.Read()) { - using (IRecordsReader dr = SqlHelper.ExecuteReader("Select pk, id, [key], parent from cmsDictionary")) - { - while (dr.Read()) - { - //create new dictionaryitem object and put in cache - var item = new DictionaryItem(dr.GetInt("pk"), - dr.GetString("key"), - dr.GetGuid("id"), - dr.GetGuid("parent")); + //create new dictionaryitem object and put in cache + var item = new DictionaryItem(dr.GetInt("pk"), + dr.GetString("key"), + dr.GetGuid("id"), + dr.GetGuid("parent")); - DictionaryItems.TryAdd(item.key, item); - } - } - - _cacheIsEnsured = true; + DictionaryItems.TryAdd(item.key, item); } } - } + + _cacheIsEnsured = true; + } } /// @@ -64,9 +64,12 @@ namespace umbraco.cms.businesslogic /// internal static void ClearCache() { - DictionaryItems.Clear(); - //ensure the flag is reset so that EnsureCache will re-cache everything - _cacheIsEnsured = false; + using (new WriteLock(Locker)) + { + DictionaryItems.Clear(); + //ensure the flag is reset so that EnsureCache will re-cache everything + _cacheIsEnsured = false; + } } /// diff --git a/src/umbraco.providers/members/MembersMembershipProvider.cs b/src/umbraco.providers/members/MembersMembershipProvider.cs index 2e906d7f8d..9f6297554c 100644 --- a/src/umbraco.providers/members/MembersMembershipProvider.cs +++ b/src/umbraco.providers/members/MembersMembershipProvider.cs @@ -792,7 +792,7 @@ namespace umbraco.providers.members return null; } - + private static string GetMemberProperty(IMember m, string propertyAlias, bool isBool) { if (!String.IsNullOrEmpty(propertyAlias)) @@ -1081,6 +1081,7 @@ namespace umbraco.providers.members DateTime.Now, DateTime.Now, DateTime.Now); } } + #endregion } } diff --git a/src/umbraco.sln b/src/umbraco.sln index 52550c6365..728c643afc 100644 --- a/src/umbraco.sln +++ b/src/umbraco.sln @@ -1,7 +1,5 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.20827.3 -MinimumVisualStudioVersion = 10.0.40219.1 +# Visual Studio 2012 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{2849E9D4-3B4E-40A3-A309-F3CB4F0E125F}" ProjectSection(SolutionItems) = preProject ..\build\Build.bat = ..\build\Build.bat @@ -177,4 +175,7 @@ Global {73529637-28F5-419C-A6BB-D094E39DE614} = {DD32977B-EF54-475B-9A1B-B97A502C6E58} {B555AAE6-0F56-442F-AC9F-EF497DB38DE7} = {DD32977B-EF54-475B-9A1B-B97A502C6E58} EndGlobalSection + GlobalSection(Performance) = preSolution + HasPerformanceSessions = true + EndGlobalSection EndGlobal