public static IDictionary <int, SecurityEntity> LoadSecurityEntities_3(ISecurityDataProvider dataProvider) { var timer = Stopwatch.StartNew(); var count = dataProvider.GetEstimatedEntityCount(); var capacity = count + count / 10; var entities = new Dictionary <int, SecurityEntity>(capacity); var relations = new List <Tuple <SecurityEntity, int> >(capacity); // first is Id, second is ParentId foreach (var storedEntity in dataProvider.LoadSecurityEntities()) { var entity = new SecurityEntity { Id = storedEntity.Id, IsInherited = storedEntity.IsInherited, OwnerId = storedEntity.OwnerId }; entities.Add(entity.Id, entity); // memorize relations if (storedEntity.ParentId != default(int)) { //entity.Parent = entities[storedEntity.ParentId]; relations.Add(new Tuple <SecurityEntity, int>(entity, storedEntity.ParentId)); } } _log.Append("Load: ").Append(timer.Elapsed).Append(", "); timer.Stop(); timer = Stopwatch.StartNew(); // set parent/child relationship foreach (var rel in relations) { var parentEntity = entities[rel.Item2]; rel.Item1.Parent = parentEntity; parentEntity.AddChild_Unsafe(rel.Item1); } _log.Append("Rel:").Append(timer.Elapsed).Append(", "); timer.Stop(); timer = Stopwatch.StartNew(); var result = new ConcurrentDictionary <int, SecurityEntity>(entities); _log.Append("Copy:").Append(timer.Elapsed); return(result); }
public IDictionary <int, SecurityEntity> LoadSecurityEntities() { if (!IsDatabaseReadyAsync(CancellationToken.None).GetAwaiter().GetResult()) { return(new Dictionary <int, SecurityEntity>()); } var count = _dataProvider.GetEstimatedEntityCount(); var capacity = count + count / 10; var entities = new Dictionary <int, SecurityEntity>(capacity); var relations = new List <Tuple <SecurityEntity, int> >(capacity); // first is Id, second is ParentId foreach (var storedEntity in _dataProvider.LoadSecurityEntities()) { var entity = new SecurityEntity { Id = storedEntity.Id, IsInherited = storedEntity.IsInherited, OwnerId = storedEntity.OwnerId }; entities.Add(entity.Id, entity); // memorize relations if (storedEntity.ParentId != default) { relations.Add(new Tuple <SecurityEntity, int>(entity, storedEntity.ParentId)); } } // set parent/child relationship foreach (var(securityEntity, parentId) in relations) { var parentEntity = entities[parentId]; securityEntity.Parent = parentEntity; parentEntity.AddChild_Unsafe(securityEntity); } return(new ConcurrentDictionary <int, SecurityEntity>(entities)); }
public static IDictionary <int, SecurityEntity> LoadSecurityEntities(ISecurityDataProvider dataProvider) { var count = dataProvider.GetEstimatedEntityCount(); var capacity = count + count / 10; var entities = new Dictionary <int, SecurityEntity>(capacity); var relations = new List <Tuple <SecurityEntity, int> >(capacity); // first is Id, second is ParentId foreach (var storedEntity in dataProvider.LoadSecurityEntities()) { var entity = new SecurityEntity { Id = storedEntity.Id, IsInherited = storedEntity.IsInherited, OwnerId = storedEntity.OwnerId }; entities.Add(entity.Id, entity); // memorize relations if (storedEntity.ParentId != default(int)) { relations.Add(new Tuple <SecurityEntity, int>(entity, storedEntity.ParentId)); } } // set parent/child relationship foreach (var rel in relations) { var parentEntity = entities[rel.Item2]; rel.Item1.Parent = parentEntity; parentEntity.AddChild_Unsafe(rel.Item1); } return(new ConcurrentDictionary <int, SecurityEntity>(entities)); }