internal void SerializeUserConfigurationCacheEntries(BinaryWriter writer) { writer.Write(1); int capacity = 0; lock (this.userConfigCacheEntryList) { capacity = this.userConfigCacheEntryList.Count; } List <UserConfigurationCacheEntry> list = new List <UserConfigurationCacheEntry>(capacity); lock (this.userConfigCacheEntryList) { list.AddRange(new List <UserConfigurationCacheEntry>(this.userConfigCacheEntryList)); } writer.Write(list.Count); for (int i = 0; i < list.Count; i++) { UserConfigurationCacheEntry userConfigurationCacheEntry = list[i]; string configurationName = userConfigurationCacheEntry.ConfigurationName; writer.Write(configurationName); byte[] bytes = userConfigurationCacheEntry.FolderId.GetBytes(); writer.Write(bytes.Length); writer.Write(bytes); byte[] bytes2 = userConfigurationCacheEntry.ItemId.GetBytes(); writer.Write(bytes2.Length); writer.Write(bytes2); } }
internal void Remove(UserConfigurationName configName, StoreObjectId folderId) { LinkedListNode <UserConfigurationCacheEntry> linkedListNode = this.userConfigCacheEntryList.First; lock (this.userConfigCacheEntryList) { while (linkedListNode != null) { UserConfigurationCacheEntry value = linkedListNode.Value; if (value.CheckMatch(configName.Name, folderId)) { this.userConfigCacheEntryList.Remove(linkedListNode); break; } linkedListNode = linkedListNode.Next; } } }
internal bool TryGetUserConfigurationCachedEntry(UserConfigurationName configName, StoreObjectId folderId, out UserConfigurationCacheEntry cacheEntry) { bool result; lock (this.userConfigCacheEntryList) { for (LinkedListNode <UserConfigurationCacheEntry> linkedListNode = this.userConfigCacheEntryList.First; linkedListNode != null; linkedListNode = linkedListNode.Next) { UserConfigurationCacheEntry value = linkedListNode.Value; if (value.CheckMatch(configName.Name, folderId)) { cacheEntry = value; return(true); } } cacheEntry = null; result = false; } return(result); }
internal void AddUserConfigurationCachedEntry(StoreObjectId folderId, string configName, StoreObjectId itemId, bool canCleanse) { UserConfigurationCacheEntry value = new UserConfigurationCacheEntry(configName, folderId, itemId); LinkedListNode <UserConfigurationCacheEntry> node = new LinkedListNode <UserConfigurationCacheEntry>(value); lock (this.userConfigCacheEntryList) { for (LinkedListNode <UserConfigurationCacheEntry> linkedListNode = this.userConfigCacheEntryList.First; linkedListNode != null; linkedListNode = linkedListNode.Next) { UserConfigurationCacheEntry value2 = linkedListNode.Value; if (value2.CheckMatch(configName, folderId)) { linkedListNode.Value = value; return; } } if (canCleanse && this.userConfigCacheEntryList.Count > 32) { this.userConfigCacheEntryList.RemoveLast(); ExTraceGlobals.UserConfigurationTracer.TraceDebug <int>((long)this.GetHashCode(), "UserConfigurationCache::Add. The cache has reached the capacity: {0} the last entry was removed.", 32); } this.userConfigCacheEntryList.AddFirst(node); } }