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);
        }
예제 #2
0
        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));
        }
예제 #3
0
        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));
        }